2011-02-15 115 views
18

說我有一個這樣的腳本: <script type="text/javascript" src="myScript.js">腳本標記的charset屬性的默認值是什麼?

我已經看到了一些網上的來源聲稱,如果省略charset屬性,則默認爲ISO-8859-1。我見過其他人聲稱它假定與包含腳本標籤的HTML頁面具有相同的編碼。什麼是真相?

我需要知道,因爲我的JavaScript文件包含將被插入到HTML中的文字字符串,其中包括非ASCII字符,如歐元符號(€)。我意識到添加一個charset屬性或只是HTML編碼這些字符應該可以解決我的問題,但我仍然想了解默認行爲。

編輯:爲了澄清一點,我不僅需要知道標準所說的內容,而且還需要了解瀏覽器的實際行爲。這裏描述的行爲:http://joconner.com/2008/09/javascript-file-encoding/似乎暗示瀏覽器不總是總是假設ISO-8859-1。

+1

我期望默認行爲依賴於您的**服務器**,而不是在任何「封閉」內容中定義的字符集。我不知道這是肯定的,所以張貼作爲評論而不是答案。 – Ben 2011-02-15 14:31:36

+0

IIRC,瀏覽器默認爲「腳本出現的頁面的編碼,有時即使charset另有說明」。我沒有一個權威的來源,所以我很猶豫,把這個作爲一個答案.. – Quentin 2011-02-15 15:20:49

+0

@Ben Poole:當你說它依賴於服務器,你的意思是在服務器發送的HTTP頭,或什麼其他?我的意思是,最終網絡瀏覽器必須弄清楚如何閱讀腳本,對吧? – 2011-02-15 16:22:25

回答

6

W3C已經對瀏覽器的標準方式來確定字符編碼,你可以在這裏讀到它:http://www.w3.org/TR/html4/charset.html#spec-char-encoding

綜上所述,符合用戶代理必須 觀察時 確定以下重點文檔的字符 編碼(從最高優先級到最低 ):

  1. 在「內容類型」字段中的HTTP「字符集」參數。
  2. 將「http-equiv」設置爲「Content-Type」併爲「charset」設置的值的META聲明。
  3. 在指定外部資源的元素上設置的字符集屬性。

除了這個 優先列表之外,用戶代理可能使用啓發式和用戶設置 。例如,對於 示例,許多用戶代理使用 啓發式來區分用於日文文本的各種編碼。 此外,用戶代理通常有 用戶可定義的本地默認 字符編碼,它們在 沒有其他指標時適用。

0

HTML編碼字符串並將它們傳遞給javascript變量可能會導致問題,特別是如果您使用十六進制代碼作爲js,我被告知更喜歡八進制。

如果你可以使用utf-8作爲你的網頁的字符集,那麼js可以很好地工作。我使用了很多,並且從來沒有必要爲包含的腳本文件定義字符集。

2

根據w3schools.com,該值爲ISO-8859-1,並支持所有主流瀏覽器。

按照HTTP 1.1 specification

當沒有明確的字符集參數由發送者提供,「文本」類型的媒體子類型被定義爲具有的「ISO-8859-1」一個默認字符集值當通過HTTP接收時。除「ISO-8859-1」或其子集以外的字符集中的數據必須用適當的字符集值標記。有關兼容性問題,請參閱部分3.4.1

因此,任何不符合此要求的內容在技術上都不符合HTTP 1.1規範。

1

HTML54.11.1腳本元素

如果腳本元素有一個charset屬性,然後讓這個腳本元素腳本塊的字符編碼是得到一個結果從charset屬性的值編碼。

否則,讓該腳本元素的腳本塊的回退字符編碼與文檔本身的編碼相同。

該報價鏈接到DOM document元素,該元素具有encoding屬性。

TODO:找出如何從標準中確定該對象的編碼。

相關問題