2009-10-20 68 views
4

如果我正在閱讀HTML文件的XML,那麼我是否必須閱讀標記以告訴我可以讀取文件的編碼?該標籤是不是以與文件相同的方式進行編碼?我很好奇你如何閱讀該標籤而不知道編碼。我意識到這是解決問題。我只是好奇它是如何完成的。如何在不知道編碼的情況下讀取編碼頭?

更新1

我不明白,在UTF-16不會每個字符佔用2個字節,而不是一個,而且比ASCII不同?例如,UTF-16(U + 0045)中的字符E是0xfeff0045。那是0xfeff,然後是0x0045,但是一些編碼會改變那個末端。你是否必須通過檢查0xfeff並意識到不能是ASCII或什麼?

回答

6

這裏是W3C不得不說一下吧:

的XML編碼聲明 在實體中以內部標籤, 指示哪些字符編碼是使用 。然而,在一個XML處理器可以讀取內部標籤之前, 顯然必須知道哪些字符 正在使用 - 哪些是 內部標籤試圖指示的內容。 在一般情況下,這是一個無望的情況。這不是在XML完全 無望,但是,因爲XML 以兩種方式限制了一般的情況: 每個實現被假定爲 僅支持有限的一組字符 編碼,並且所述XML編碼 聲明在 位置限制和內容,以便使其 可行,以自動檢測 編碼中正在使用的每個實體中的 正常情況。

http://www.w3.org/TR/2000/REC-xml-20001006#sec-guessing

+0

+1換句話說,處理器只是嘗試所有的編碼,直到XML編碼聲明出現在輸出中 – 2009-10-20 16:05:30

1

編碼名稱僅限於([A-Za-z0-9._] |' - '),所以對於基於ASCII或ISO-646的任何編碼(例如ISO 8859- *,ISO 10646/Unicode)的。

編輯:雖然仍有一些含糊之處。例如,您仍然需要了解是否嘗試一次讀取8,16或32位塊以讀取它。還有一些小的細節是合適的UTF-16或UTF-32/UCS-4文件,它應該以BOM開頭 - 但XML規範似乎不允許包含BOM ...

但是,如果您知道該文件應該包含XML,那麼您可以很好地瞭解文件需要的啓動方式,因此不正確的猜測很容易檢測到。

+0

我不明白,在UTF-16中不會每個字符佔用2個字節,而不是一個,並且與ascii不同? – 2009-10-20 15:28:17

+2

解析器在沒有BOM的情況下推導出UTF編碼的長度有嚴格的規則:http://www.w3.org/TR/2000/REC-xml-20001006#sec -guessing-no-ext- info – 2009-10-20 15:39:46

0

對於HTML,它HTML5被記錄在案。 (不要閱讀,如果你仍然相信網絡上的任何東西都很理智)

相關問題