HTML5编码和西里尔字母

13

让我感到好奇的是 - 据说HTML5中的默认字符编码是UTF-8。然而,如果我有一个像下面代码一样带有HTML5 doctype的简单HTML文件,我会得到:

俄语中的“hello”:“ЗдраÑтвуйте”

在Chrome 33+,Safari 6,IE11等浏览器中。

<!DOCTYPE html>

<html>

<head></head>

<body>
    <p>"hello" in Russian is "здраствуйте"</p>
</body>

</html>

怎么回事?浏览器难道不应该使用UTF-8的Unicode标准并正确显示文本吗?我正在使用默认设置为UTF-8编码保存html文件的Coda,所以这不是问题所在。


你可以将文件保存为任何你想要的名称 - 浏览器不在你的系统上,而是在用户的系统上,你永远不知道他们的浏览器设置是什么。 - All Blond
4
俄语中的“hello”是“здравствуйте”,而不是“здраствуйте”。请注意字母“а”的正确拼写。 - Dmytro
2个回答

25
在该示例中,文本数据是UTF-8编码的文本,被错误地解释为window-1252编码。原因是未指定编码,浏览器只能猜测。要修复这个问题,请指定编码;请参见W3C页面 字符编码。有两种简单的方法,不受服务器设置的影响,只要服务器不在HTTP标头中发送错误的编码信息:

1)将文件保存为UTF-8 带BOM(您的创作程序中可能有此选项)。

2)将以下标签添加到部分中:

<meta charset=utf-8>

HTML5并没有指定单一的默认编码。相反,当没有声明编码时,浏览器会 猜测 编码方式。这是一个比较复杂的过程,在8.2.2.2 确定字符编码中有描述。


9
如果您想确定浏览器将使用哪个字符集,则必须在页面头部中添加以下内容:
 <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

否则您将受制于本地设置和浏览器自动化。

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