2012-03-25 97 views
0

我在执行测试时已经注意到stange的东西。
“stange things”涉及字符编码。JavaScript字符编码+ Internet Explorer 9编码

对于每个测试,我都在我的Internet Explorer 9 Web浏览器中加载了一个HTML页面。
我的HTML页面以UTF-8编码。
这是我的HTML页面的代码:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
<script type="text/javascript"> 
    var strChaine = "été"; 
    alert(strChaine.charCodeAt(0) + 
      " " + strChaine.charCodeAt(1) + 
      " " + strChaine.charCodeAt(2) + 
      " " + strChaine.charCodeAt(3) + 
      " " + strChaine.charCodeAt(4)); 
</script> 
</head> 
<body> 

</body> 
</html> 

HTML页面包含的JavaScript代码来显示一个警告框。

在每次测试之前,我已在IE9中通过右键单击然后在编码菜单中选择一个选项来设置特定编码。

测试1

对于此测试,IE9编码已被设置为UTF-8。
警报框显示:233 116 233 NaN NaN

对我来说这似乎很奇怪。
由于我的HTML页面是用UTF-8编码的,IE9使用UTF-8对我的HTML页面进行解码,所以我期望警告框显示:195 169 116 196 116
0d195 0d169 0d116 0d196 0d116是UTF-8十进制表示的字符串“été”。
0xC3 0xA9 0x74 0xC3 0xA9是UTF-8十六进制等效表示。

有没有人可以证明真正显示在警告框中的内容?

测试2

对于这个测试IE9编码已被设置为西方字母(ISO)。
警报框显示:195 169 116 195 169

这又一次对我来说似乎很奇怪。
我得到了我期望的测试1的结果。

有没有人可以证明显示在警告框中的内容?

回答

2

字符串"été"包含三个字符,其中包含脚本显示的Unicode代码号。这不依赖于字符编码。 JavaScript代码适用于字符,或者更确切地说,是以Unicode代码为单位,而不是用于表示字符的字节。

如果实际的编码是UTF-8,并且你让浏览器把它当作一些8位编码,这就是你所说的“Occidental alphabet(ISO)”,那么浏览器会错误地解释八位字节UTF-8表示就好像每个人都代表了一个字符