2012-01-12 24 views
13

我們可以通過下面的代碼聲明在一個單獨的CSS文件的字符編碼:如何在INDIVIDUAL JS文件中聲明字符編碼?

@charset "UTF-8";

我的問題是:

如何在一個單獨的JS文件中聲明的字符編碼?

如果我發送一個JS文件給我的朋友,我希望他(她)可以理解這個js文件的字符編碼從代碼本身時,他(她)開始瀏覽或編輯這個JS文件。

謝謝!

回答

13

你不能。但是,您可以在使用charset attribute將文件帶入頁面的​​中對其進行定義。這必須與您爲該文件提供服務的Content-Type中的charset(如果有)匹配。引用:

charset屬性給出了外部腳本資源的字符編碼。如果src屬性不存在,則不能指定屬性。如果該屬性設置,它的值必須是有效的字符編碼的名稱,必須是preferred MIME name該編碼的ASCII case-insensitive match,並且在外部文件的Content-Type metadatacharset參數給出的編碼,如果有的話必須匹配。 [IANACHARSET]

回覆您的編輯:

如果我發送一個JS文件給我的朋友,我希望他(她)可以理解這個js文件的字符編碼從代碼本身時,他(她)開始瀏覽器或編輯這個JS文件。

爲此,你幾乎必須告訴他/她。如果文件使用UTF-8或Windows-1252或ISO 8859-1,遺憾的是沒有可用編碼的文件指示符,所以我會在開始時加入以下注釋:

// Encoding: UTF-8 

如果您使用UTF-16或UTF-32,但是,你應該能夠告訴你的編輯器使用BOM,這是其它編輯應該看到和理解(如果他們支持Unicode的編輯器)。這通常只適用於以文本(語言)編寫需要大量多字節字符的評論,並且如果評論與代碼的比率很高(因爲代碼是用西文寫的),當然歡迎您使用任何你喜歡的編碼。只是如果註釋與代碼的比率很低,即使註釋文字需要大量的四字節字符,您最好還是堅持使用UTF-8,因爲代碼每個字符只需要一個字節。 (而在UTF-16,則可能有更多的兩個字節,而不是在您的評論的四字節字符,但是代碼總是需要每個字符用兩個字節;和UTF-32,每個字符的四個字節等全該文件可能是較大的,即使意見採取更少的空間。但在這裏我可能告訴你的東西,你已經知道的遠遠比我好,如果我猜中你的原因的問題。)

+0

您還可以爲UTF-8添加BOM,瀏覽器也會尊重它。 – Andrea 2016-03-05 02:09:22

+0

@Andrea:並非所有瀏覽器都不可靠。設置響應的charset不是可選的,相關的RFC很清楚地說明沒有一個響應是US-ASCII。就在幾周前,這裏有一個問題,IE正在用UTF-8解釋ajax請求的JSON,但是Firefox在BOM上表現不佳,稱它爲無效的JSON。 – 2016-03-05 08:52:21

+0

@ T.J.Crowder哪個相關的RFC? [WHATWG的編碼規範說「字節順序標記(也稱爲BOM)比其他任何東西都更具權威性」](https://encoding.spec.whatwg.org/#specification-hooks)。當然,如果你正確地做事,你應該包括一個字符集=。 – Andrea 2016-03-05 22:49:14

3

有沒有JavaScript結構來聲明文件本身的編碼,你可以在CSS中進行編碼。編碼應在傳送數據時傳送給收件人。以電子郵件附件發送文件時,您的電子郵件程序可能會或可能不會將Content-Type標頭包含在內,以指示編碼(但可能很難確定編碼可能是什麼)。

您也可以在UTF-8編碼文件的開始處使用字節順序標記(BOM)。雖然UTF-8中沒有字節順序問題,但BOM作爲一個有用的指標 - 以UTF-8編碼構成BOM的字節開始的文件最可能是UTF-8編碼。這就是爲什麼程序可能很好地推斷編碼,在沒有其他指示的情況下。這當然不是100%可靠的,但是一個有用的東西。

許多文本編輯器可以選擇將文件保存爲「使用BOM編碼的UTF-8」。

(在網頁上,該BOM一度被視爲風險,因爲觀察到把它當作字符數據的瀏覽器。這些天來,BOM即使在UTF-8是非常有用的,而不是風險。)

3

如果您有興趣以人類可讀的方式指示文件的編碼,T.J. Crowder's想法(對文件添加註釋,如// Encoding: UTF-8)就是這樣。正如Jukka K. Korpela指出的那樣,您也可以使用BOM。

但是,如果你想有一個機器可讀的方式來表示有一對夫婦的其他方式是在文檔中聲明的字符集:

舉例來說,一個Apache httpd的服務器上,你可以使用以下任何聲明:

  1. AddDefaultCharset UTF-8
  2. AddCharset UTF-8 .js
  3. AddType 'application/javascript; charset=UTF-8' js *

*我沒有興趣在做的情況下使用了"application/javascript""text/javascript"。但是如果你有興趣知道爲什麼可以選擇其中一個,那麼比較一下。 https://stackoverflow.com/a/4101763/1070047。但是,鑑於該主題,application/javascript似乎非常合適(特別是如果您打算使用BOM,因爲它表示代碼應該被視爲二進制文件)。

如果代碼將被解釋/處理/編譯服務器端(如PHP),可以設置頭文件中,如...

header("Content-Type: application/javascript; charset=utf-8");

至少在PHP中,一定要添加頁眉任何輸出發生之前的語句。

最後,當確定使用哪個聲明時,考慮(當理解/遵守時,即不在IE中),BOM具有比文檔頭更大的權限。並且都優先於鏈接/來源的字符集聲明(如<script type="application/javascript" src="script.js" charset="utf-8"></script>)。