在UTF-8页面中显示拉丁语1个字符

时间:2012-12-13 20:41:57

标签: html utf-8 character-encoding

这是一个test.html文件,使用我的文本编辑器以latin 1格式保存:

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

如果以chrome格式查看文件,则è字符显示为问号。我不明白为什么:è是拉丁语1的一部分,拉丁语1应该与utf-8的(子集)兼容,所以字符è的代码在latin 1和utf-8中不应该相同?

如果我将charset更改为ISO-8859-1,当然一切都很好。

由于

3 个答案:

答案 0 :(得分:6)

您将字符集/代码页的概念与编码混淆。 UTF-8和ISO-8859-1(Latin-1)是编码,它们是如何以字节表示字符的系统,而不是您选择的字符列表。

您将文件另存为ISO-8859-1,因此您的文件为0xE8。您告诉浏览器该文件是以UTF-8编码的,因此浏览器会尝试根据UTF-8的规则解码您的文件。并且0xE8在UTF-8中无效。

当您告诉浏览器在ISO-8859-1中对其进行解码时,它可以正常工作,因为0xE8在ISO-8859-1中有效,并且根据ISO-8859-1的代码页显示一个字符0xE8的价值。

此外,ISO-8859-1是 unicode (utf编码的“代码页”)的子集,而不是UTF-8。这意味着ISO-8859-1代码页中的前256个字符与unicode中前256个字符的字符相同。

还有更多。浏览器实际上从不使用ISO-8859-1来解码您的页面,而是秘密使用Windows-1252。这也已在HTML-5 draft

中指定

答案 1 :(得分:0)

128-255范围内的Latin-1字符在UTF-8上下文中无效。虽然它们共享相同的字符代码,但在UTF-8中它们的表示方式不同。例如,UTF-8中的è实际上是è0xE8不是UTF-8字符串中的有效字符,除非后跟\x80\xBF范围内的两个字符,因此您将获得替换字符。

答案 2 :(得分:0)

如果将文件保存为Latin 1,则编码为UTF-8的charset属性声明不正确。 您必须以charset属性声明的编码保存文件。