2012-03-25 2 views
0

Я заметил, что во время выполнения тестов были замечены неуверенные вещи.
«Странные вещи» касаются кодирования символов.Кодировка символов JavaScript + Кодирование Internet Explorer 9

Для каждого теста я загрузил HTML-страницу в своем браузере Internet Explorer 9.
Моя 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 декодирует мою HTML-страницу с помощью UTF-8, я ожидаю, что появится окно предупреждения: 195 169 116 196 116
0d195 0d169 0d116 0d196 0d116 - это десятичное представление UTF-8 строки «été».
0xC3 0xA9 0x74 0xC3 0xA9 - это шестнадцатеричное эквивалентное представление UTF-8.

Кто-нибудь может обосновать содержание, действительно отображаемое в окне предупреждения?

Тест 2

Для этого теста IE9 кодирование было установлено значение Occidental алфавита (ISO).
Поле оповещения: 195 169 116 195 169

Опять мне кажется странным.
У меня есть результат, который я ожидаю для теста 1.

Кто-нибудь может оправдать содержимое, отображаемое в поле предупреждения?

ответ

2

Строка "été" содержит три символа с кодовыми номерами Unicode, отображаемыми вашим скриптом. Это не зависит от кодировки символов. Код JavaScript работает на символах или, точнее говоря, на юникодовых кодах, а не на байтах, которые использовались для представления символа.

Если фактическая кодировка является UTF-8, и вы делаете ее браузером, рассматривая ее как находящуюся в некотором 8-битном кодировании, что вы, вероятно, подразумеваете под «Occidental alphabet (ISO)», тогда браузер неправильно истолковывает октеты представление UTF-8, как если бы каждый из них представлял символы

Смежные вопросы