4

我打印了一些 UTF-16 编码字符并尝试在 Firefox 中显示它,它显示为�。

所以我去了工具->编码并将编码从UTF-8更改为UTF-16(我也尝试直接在HTML中更改字符集)但是,当我这样做时,我的页面完全被符号淹没了:

਍ℼ佄慢呃偙⁅瑨汭ാ㰊瑨汭ാഊ㰊敨摡ാ†ഠ †㰠楴汴㹥楬畮⁸楆敲潦⁸楤灳慬捹朠扥扥⁵敧湫景眠扥 潆条⁥畓数⁲獕牥⼼楴汴㹥਍††氼湩敲㵬猢潨玱畣⁴捩汤•牨晥∽瑨灴⼺振湤献瑳瑡捩渮瑥猯灵牥猎珩杭是痴捩汤潣㸢਍湩敲にギ愢灰敬琭畯††浮潣扦扦浮椣敲扦扦潠椣敲击㵮潣≮扮捩摑摵獳防护楴⹉殮............ ...

Web 浏览器如何在不破坏页面的情况下显示 UTF-16 字符?

4

4 回答 4

6

“充满符号的”摘录看起来像一个 UTF-8 编码的 HTML 文档,但被视为 UTF-16 编码。或者它可能主要包含 UTF-8 数据和一些 UTF-16 编码数据,这是行不通的。

如果您将数据保存为正确的 UTF-16 编码并在 HTTP 标头和/或meta标签中声明编码,那么有些浏览器会显示它正常,有些则不会。搜索引擎通常无法处理 UTF-16,而 UTF-16 大多不使用,也不应该在网络上使用,除非在知情的合作伙伴之间达成共识。

于 2012-10-30T07:38:34.007 回答
3

Firefox 无法在您的文档中找到正确的字符集。对于网页,应该使用 head 元标记来指示内容的字符集。它应该放在 HTML 文件的开头,指示浏览器应该将哪个字符集用于文件的其余部分。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

所以浏览器在读取该行之前是字符集盲的。但是使用 utf-8 是没有问题的。因为到那时为止的每个字符都以 utf-8 编码,其编码方式与 ASCII 相同(latin-1 和其他字符也是如此)。在 utf-16 中并非如此。

W3C 说

共有三种不同的 Unicode 字符编码:UTF-8、UTF-16 和 UTF-32。在这三个中,只有 UTF-8 应该用于 Web 内容。

所以你应该使用utf-8。但是,如果您仍想尝试使用 utf-16 进行某些操作,请在请求文件时使用 BOM。您将为浏览器提供更好的机会来解决它并正确解码内容。

关于 utf-16 的使用,另一个答案非常简洁。

虽然Joel 给出了关于字符编码的完整课程,以及为什么 HTML 在内容中使用它声明而不是作为标题信息。

于 2018-01-26T16:00:21.160 回答
1

将 UTF-16 数据作为网页发送到浏览器是旧浏览器中的 XSS 风险。(见另一个答案。)不要这样做。相反,在服务器上将数据转换为 UTF-8 并通过 HTTP 发送 UTF-8。

于 2013-08-14T13:02:51.853 回答
0

完成这项工作的方法是让页面说明它的编码方式。在 UTF-16 的情况下,它还有助于包含 BOM。“中文泛滥”效果很可能是因为您的页面是 UTF-16LE,但浏览器将其视为 UTF-16BE,反之亦然......

于 2012-10-31T06:01:16.633 回答