6 html unicode encoding utf-8 character-encoding
我有以下HTML5文档:
\n\n<!DOCTYPE html>\n<html>\n <head> </head>\n <body>\n <p>Betr\xc3\xa4ge: 20\xe2\x82\xac</p>\n </body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n\n上述 cod 的输出如下:
\n\nBetr\xc3\x83\xc2\xa4ge: 20\xc3\xa2\xe2\x80\x9a\xc2\xac\n
Run Code Online (Sandbox Code Playgroud)\n\n我尝试了下面的HTML5代码:
\n\n<!DOCTYPE html>\n<html>\n <head>\n <meta charset="UTF-8">\n </head>\n <body>\n <p>Betr\xc3\xa4ge: 20\xe2\x82\xac</p>\n </body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n\n上面的代码给出了我所期望的以下输出:
\n\nBetr\xc3\xa4ge: 20\xe2\x82\xac\n
Run Code Online (Sandbox Code Playgroud)\n\n据我所知,HTML5的默认字符编码是UTF-8。它的默认值意味着不应在<meta>
标记内显式指定它。
因此,在我的第一个代码片段中,我跳过了代码<meta charset="UTF-8">
,但我得到了一些奇怪的意外结果。
<meta charset="UTF-8">
然后,我尝试在一对标签之间添加代码<head>
,它工作得很好,我得到了预期的结果。
所以,我的问题是,既然HTML5中的默认字符编码已设置为UTF-8,为什么如果没有明确指定它就不起作用?
\n\n为什么需要在HTML5文档中指定字符编码“UTF-8”?
\n\n\n这个答案依赖于一些现在已经
\n过时的文档,请参阅jon1000 的答案进行更新。(感谢 @blazee 在评论中指出这一点)我将把这个答案留在这里,因为关于如何字符串"Betr\xc3\xa4ge: 20\xe2\x82\xac"
在各种编码中发生变化似乎仍然准确。
HTTP1.1指定浏览器应将所有文本视为 ISO-8859-1,除非另有说明(这引用了RFC -2616,但后来被取代,请参阅 @jon1000\'s 答案):
\n\n当发送方未提供显式字符集参数时,“文本”类型的媒体子类型将定义为具有默认字符集值“ISO-8859-1”
\n
同时,HTML5规定:
\n\n\n如果传输层指定了一种编码,并且支持该编码,则以一定的置信度返回该编码,并中止这些步骤。
\n
因此,HTTP1.1 默认为 ISO-8859-1,并覆盖其他所有内容。
如果你编码
\nBetr\xc3\xa4ge: 20\xe2\x82\xac\n
Run Code Online (Sandbox Code Playgroud)\n使用UTF-8,然后将其解码为ISO-8859-1,您将得到准确的乱码输出:
\nBetr\xc3\x83\xc2\xa4ge: 20\xc3\xa2\xc2\xac\n
Run Code Online (Sandbox Code Playgroud)\n如以下代码片段所示(Java,并不重要):
\nnew String("Betr\xc3\xa4ge: 20\xe2\x82\xac".getBytes("utf-8"), "iso-8859-1")\n// result: Betr\xc3\x83\xc2\xa4ge: 20\xc3\xa2\xc2\xac\n
Run Code Online (Sandbox Code Playgroud)\n浏览器实际上确实会警告您。例如,Firefox 在控制台中显示以下警告:
\n\n\nHTML 文档的字符编码未声明。如果文档包含 US-ASCII 范围之外的字符,则在某些浏览器配置中,该文档将呈现为乱码。页面的字符编码必须在文档或传输协议中声明。
\n
要获得正确的输出,您必须通过 UTF-8 手动覆盖 ISO-8859-1(对于 Firefox,它位于View
-> Text Encoding
->下Unicode
(而不是“ Western
”))。
所以,总结一下:我没有看到它在哪里说“HTML5 的默认字符编码是 UTF-8”。它所说的似乎都是:
\n\n\n鼓励作者使用 UTF-8。一致性检查人员可能会建议作者不要使用旧编码。
\n
因为“HTML5的默认字符编码是UTF-8”的说法是错误的。该声明由此类网站发布。但正如 Marcel Dopita 在Don\xe2\x80\x99t be follyed by w3schools 中所写,UTF-8 不是默认的 HTML5 字符集,这是错误的,事实上W3C 建议对英语有一个“建议的默认编码”Windows-1252语言环境。
\n\n有时有人说“HTTP/1.1 默认为 ISO-8859-1”。在 1999 年标准 (RFC 2616) 中确实如此,但在 2014 版本 (RFC 7230-7329) 中,默认字符集已被删除,因此默认行为现在仅由 HTML5 建议指定。另外,即使传输层确实指定了“iso-8859-1”,它也不是HTML5 和编码规范中支持的编码表示它应该被视为 Windows-1252 的标签。
\n 归档时间: |
|
查看次数: |
2216 次 |
最近记录: |