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

13

我正在使用ASP.NET MVC、MS SQL和IIS。我的一些用户在其个人资料信息中使用了中文字符。然而,在显示此信息时,它会显示为æŽå¼·è¯,但是它们在我的数据库中是正确的。目前,我的HTML页面的UTF设置为UTF-8。我应该将它更改为UTF-16吗?我知道这样做可能会有一些问题,但我有哪些选择?


你在输出时使用的是 htmlentities() 还是 htmlspecialchars() - Andrew67
这些只适用于PHP,对吧? - Aaron Salazar
1
你尝试在meta标签中指定字符集了吗?https://www.w3.org/International/questions/qa-html-encoding-declarations - Jonas Stawski
2个回答

28

UTF-8和UTF-16编码覆盖的字符集是完全相同的。不是因为UTF-8不能包含中文字符而UTF-16可以。

UTF-16使用固定的16位来表示一个字符;而UTF-8使用1、2、3,最多4个字节不等的长度,根据不同的字符来进行编码,因此ASCII字符仍然只使用1个字节表示。

请参考维基百科了解更多有关Unicode的内容。

因此,切换到UTF-16几乎没有任何帮助作用。正如您在上面链接的SO问题中所讨论的那样,这可能会使情况变得更糟。实际上问题出现在您的设置中其他地方,没有正确考虑非ASCII或非Latin-1字符。确保设置的每个部分都使用UTF-8。


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

6
任何UTF编码都应该能够表示Unicode字符的能力相同,因此切换到UTF-16是没有帮助的。有一个编码问题存在,在UTF-16下你只会得到不同的错误HTML表示。当然,如果你有一些库,它可以将非ASCII字符简单地编码为实体并支持宽字符,那么通过切换可能会解决你的问题。但是,仍然有一些需要2个宽字符的字符,这些字符仍然会显示错误,尽管用户可能很少注意到。最好的选择是让生成HTML的任何东西正确解释你的UTF-8。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接