Кодировка символов JavaScript + кодировка Internet Explorer 9 - PullRequest
0 голосов
/ 25 марта 2012

Я заметил странные вещи во время выполнения тестов.
«Странные вещи» касаются кодировки символов.

Для каждого теста я загружал 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 - это десятичное представление строки «été» в UTF-8.
0xC3 0xA9 0x74 0xC3 0xA9 - это UTF-8шестнадцатеричное эквивалентное представление.

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

Тест 2

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

Снова мне это кажется странным.
Я получил результат, ожидаемый для теста 1.

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

1 Ответ

2 голосов
/ 25 марта 2012

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

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

...