2012-04-21 121 views

回答

7

如果您的javascript文件使用與頁面不同的編碼進行編碼,您可以使用charset屬性告訴瀏覽器如何解釋它。

例如,如果頁面使用的是Latin1,但JS文件是使用UTF-8創建的。

+1

儘管在我看來,最好是將編碼放在返回腳本的響應頭部。 – GolezTrol 2012-04-21 09:53:05

+1

@GolezTrol - 它會更好,但並不是所有的網頁作者都擁有對標題的控制權。 – Oded 2012-04-21 09:57:56

+1

如果頁面正在使用其他編碼(在我的情況下爲euc-kr)並且JS使用UTF8,則通過調用document.write()或設置某個元素的innerHTML編寫的某些文本將在編碼中正確編碼(euc -kr)不是UTF8? – 2012-04-21 10:37:36

3

每個JavaScript文件都是一個獨立於頁面的元素,畢竟你甚至可以從一些遠程作者的服務器加載JS,否則這些服務器與你的頁面根本沒有任何關係。就像其他任何外部元素一樣,如果遠程服務器出於某種原因返回錯誤的字符集,或者只是爲了確定,您可以手動指定「字符集」。另外,如果你自己有寫入這個JS文件的權限,你可能想用Unicode位置轉義替換所有的非ASCII碼 - 這將保證符號總是能被正確解釋,不管在頭文件中指定了什麼編碼。一些JS縮小器,比如Google Closure Compiler,可以自動爲你做。

+0

那麼哪個優先? '腳本charset'或包含的js文件的標題字符集? – Pacerier 2014-10-06 12:17:08

5

charset參數的用途是指定在HTTP協議級別未指定編碼的情況下外部腳本的編碼。它是而不是,意思是覆蓋HTTP標頭中的編碼信息,而不是這樣做。

當作者無法控制HTTP標頭並且標頭未指定字符編碼時,這非常有用。它對離線文件也很有用,例如直接訪問網頁的本地副本,而不是通過HTTP服務器,因此不存在HTTP頭。

實際上,它不是很有用。如果您需要在JavaScript文件中使用非Ascii字符,則可以使用UTF-8編碼。如果您使用具有領先BOM的UTF-8,則BOM可作爲有用的指標,讓瀏覽器推斷編碼。但它並沒有傷害額外使用charset=utf-8

+0

你確定包含的JS文件的頭文件中指定的字符集的優先級高於主HTML頁面中指定的顯式字符集的優先級嗎?這是在真實的瀏覽器**在野外**測試的嗎? – Pacerier 2014-10-06 12:26:04

+1

是的,在Firefox,Chrome,IE(Win 7)中測試過。測試頁面:http://www.cs.tut.fi/~jkorpela/test/js/demo.html – 2014-10-06 12:53:05

相關問題