2012-09-13 39 views
15

一個例子的HTML文檔中檢索通過HTTP缺乏:如果沒有提供字符編碼,HTML5是否爲HTML文檔指定默認字符編碼?

  • 一個HTTP Content-Type
  • 一個HTML <meta charset="<character encoding>" />
  • 一個HTML <meta http-equiv='Content-Type' content='Type=text/html; charset=<character encoding>'>

至於HTML5,是一種缺省情況下,例如UTF-8,假定爲字符編碼?或者它完全是在閱讀HTML文檔以選擇默認的應用程序?

回答

14

的字符集是用確定的下列規則:

  1. 用戶替代。
  2. 「Content-Type」字段中的HTTP「字符集」參數。
  3. 字節順序在HTML文檔本身中的任何其他數據之前標記。
  4. 帶有「字符集」屬性的META聲明。
  5. META聲明的「http-equiv」屬性設置爲「Content-Type」併爲「charset」設置值。
  6. 未指定的啓發式分析。

...然後...

  1. 根據字符集別名匹配的Unicode技術標準#22定義的規則規範化給出的字符編碼字符串。
  2. 覆蓋一些有問題的編碼,即故意將某些編碼看作是不同的編碼。最常見的重寫是將US-ASCII和ISO-8859-1視爲Windows-1252,但此表中列出了其他幾種編碼重寫。正如規範所指出的那樣,「按照上表的要求將某些編碼視爲其他編碼是對W3C字符模型規範的故意違反。」

但最重要的是:

你應該始終指定的字符編碼每 HTML文檔,或不好的事情會發生。你可以用困難的方式(HTTP內容類型頭),簡單的方法(<meta http-equiv>聲明)或新的方式(<meta charset>屬性)來完成,但請做到這一點。網絡感謝你。

來源:

+0

謝謝,我明白,一個字符編碼應該總是被定義。我正在驗證無法控制的文檔,如果沒有指定,我需要知道是否應該恢復爲默認編碼。 –

+1

考慮使用W3驗證器使用的相同邏輯。它是開源的,所以你可以看看它的代碼,看看它做什麼。 – ThiefMaster

+1

這並不真正回答爲什麼需要字符集的問題,以及默認設置是如此糟糕的問題。此外,這仍然是答案?這已經寫了兩年了,從那以後瀏覽器升級了很多。 IE沒有,但老版本已經退步了。 – trysis