我应该从 UTF-8 更改为 UTF-16 以适应我的 HTML 中的中文字符吗?

Posted

技术标签:

【中文标题】我应该从 UTF-8 更改为 UTF-16 以适应我的 HTML 中的中文字符吗?【英文标题】:Should I change from UTF-8 to UTF-16 to accommodate Chinese characters in my HTML? 【发布时间】:2011-04-21 08:38:22 【问题描述】:

我正在使用 ASP.NET MVC、MS SQL 和 IIS。我有一些用户在他们的个人资料信息中使用了汉字。但是,当我显示此信息时显示为æŽå¼·è¯,但它们在我的数据库中是正确的。目前,我的 html 页面的 UTF 设置为 UTF-8。我应该将其更改为 UTF-16 吗?我知道有一个 few problems 可以来自此,但我的选择是什么?

【问题讨论】:

你在输出时使用的是htmlentities()还是htmlspecialchars() 那些只是 php 的,对吧? 您是否尝试过在元标记中指定字符集? w3.org/International/questions/qa-html-encoding-declarations 【参考方案1】:

任何 UTF 编码在表示 Unicode 字符的能力上都应该相同,因此切换到 UTF-16 将无济于事。某处存在编码问题,使用 UTF-16,您最终只会得到不同的错误 HTML 表示。当然,如果您有一些库只是将非 ASCII 字符编码为实体并且确实支持宽字符,那么您的问题可能会通过开关解决。然而,有些字符甚至需要 2 个宽字符,这些字符仍然会显示错误,尽管用户可能很少注意到。最好的选择是让任何生成 HTML 的东西都能正确解释您的 UTF-8。

【讨论】:

【参考方案2】:

UTF-8 和 UTF-16 编码完全相同的字符集。不是UTF-8不覆盖汉字,UTF-16有。 UTF-16 统一使用 16 位来表示一个字符;而 UTF-8 使用 1、2、3,最多 4 个字节,具体取决于字符,因此 ASCII 字符仍表示为 1 个字节。 从this Wikipedia article 开始了解其背后的想法。

因此,切换到 UTF-16 对您毫无帮助的可能性很小。正如您在上面链接的 SO 问题中所讨论的那样,它有可能使事情变得更糟。您的设置中的其他地方存在问题,它没有正确考虑非 ASCII 或非拉丁 1 字符。确保设置的每个部分都使用 UTF-8。

【讨论】:

UTF-16 可以有 2 个代码单元,每个 16 位,总共需要 32 位来表示一个字符,请参阅 en.wikipedia.org/wiki/UTF-16 中的一些示例 @yuji 实际上 UTF-8 最多可以使用 4 个字节。最初是 6,但在意识到这将是一个矫枉过正后(我们今天只使用大约 110.000,而 6 字节将允许 20 亿!)人们选择了 4 字节tools.ietf.org/html/rfc3629

以上是关于我应该从 UTF-8 更改为 UTF-16 以适应我的 HTML 中的中文字符吗?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access VBA 并使用 unicode UTF-8 / UTF-16 报告问题

怎么把win10txt文件默认格式从UTF-8改为ANSI?

将PowerShell的默认输出编码更改为UTF-8

有啥理由比 UTF-8 更喜欢 UTF-16?

我应该使用 UTF-8 通过网络发送数据吗?

在 Windows 和 Linux 下,在 C 中将 UTF-16 转换为 UTF-8