2012-03-25 82 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表示就好像每個人都代表了一個字符