簡體   English   中英

首選HTML元標記或HTTP標頭中的字符集聲明?

[英]Prefer charset declaration in HTML meta tag or HTTP header?

我正在解析很多網站。 一切正常,我正在讀取轉換編碼的字符集聲明。 現在我遇到了http://celleheute.de/sonntagsfuhrung-3/的問題。

HTML元標記說,內容編碼為ISO-8859-2,但HTTP標頭說,它是UTF-8。 實際上,內容是UTF編碼的,所以當我的解析器嘗試將內容轉換為ISO時,它會破壞一些字符。

現在我的問題是,我更喜歡哪種聲明? 我可以忽略元標記,當我可以在HTTP標頭中找到聲明,反之亦然? 大多數網絡瀏覽器會做什么?

要了解現代瀏覽器的作用,您應該從http://w3c.github.io/html/syntax.html#determining-the-character-encoding開始閱讀

第一步和第二步與問題最相關。 他們說

  1. 如果用戶已明確指示用戶代理使用特定編碼覆蓋文檔的字符編碼,則可選擇以確定的置信度返回該編碼並中止這些步驟。

  2. 如果傳輸層指定了編碼,並且受支持,則返回具有置信度的編碼,並中止這些步驟。

這意味着真正的HTTP標頭優先於除用戶覆蓋之外的所有內容。

除此之外,它可能變得復雜。 例如,字節順序標記可以優先於元標記。


更新:由於編寫了這個答案,規范發生了變化(大約在2012年中期),因此字節順序標記現在優先於HTTP標頭。

根本沒有答案。 該頁面的作者通過提供有沖突的信息來提交錯誤。 哪一個是正確的也可以通過拋硬幣來決定。

一般來說,我更喜歡HTTP標頭作為主要值。 無論如何,元標記只是一個后備。 如果您想要遵循任何邏輯,首先嘗試使用HTTP標頭中指定的字符集解碼文檔。 如果這顯然失敗,因為某些字節在給定編碼中無效,請再次嘗試在元標記中指定的字符集中(如果有)。 如果仍然失敗,所有投注都將被取消。

如果兩者都沒有失敗但是編碼沖突,要么涉及人類,要么對解碼后的文本進行一些靜態分析,這可能會告訴您哪種更可能是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM