Для JavaScript не существует кодировки символов по умолчанию. Программа JavaScript, в отношении спецификаций, представляет собой последовательность абстрактных символов.При передаче по сети или просто хранении на компьютере абстрактные символы должны каким-то образом кодироваться, но механизмы для этого не контролируются стандартом ECMAScript.
Раздел 6 стандарта ECMAScript использует UTF-16 в качестве эталонного кодирования, но не обозначает его по умолчанию. Использование UTF-16 в качестве ссылки логически не нужно (достаточно было бы назвать номера Юникода), но, вероятно, предполагалось, что это поможет людям.
Эта проблема не следует путать с интерпретацией строковых литералов или строк в целом. Буква, подобная «Φ», должна быть в некоторой кодировке вместе с остальной частью программы; это может быть любая кодировка, но после того, как кодировка была разрешена, литерал будет интерпретироваться как целое число в соответствии с номером Unicode символа.
Когда программа JavaScript передается как таковая (как «внешний файл JavaScript») через Интернет, применяется RFC 4329, Scripting Media Types. Параграф 4 определяет механизм: в первую очередь проверяются заголовки, такие как HTTP-заголовки, и параметр charset
, которому будет доверять. (На практике веб-серверы обычно не указывают такой параметр для программ JavaScript.) Во-вторых, применяется обнаружение спецификации. В противном случае подразумевается UTF-8.
Первая часть механизма несколько неоднозначна. Он может быть интерпретирован как относящийся к параметру charset
только в фактическом HTTP-заголовке или может быть расширен до charset
параметров в script
элементах.
Если программа JavaScript отображается как встроенная в HTML, либо через элемент script
, либо какой-либо атрибут события, то его кодировка символов, конечно же, совпадает с кодировкой HTML-документа. Раздел Specifying the character encoding спецификации HTML 4.01 определяет механизм разрешения в следующем порядке: charset
в заголовке HTTP, charset
в meta
, charset
в ссылке, которая была использована для доступа к документу, и, наконец, эвристики (догадки), которые могут включать в себя много вещей; ср к комплексу resolution mechanism in the HTML5 draft.
Строки JavaScript всегда UTF-16. – Pointy
Я думаю, это только ответ. Пожалуйста, где это задокументировано? –
Я пытаюсь точно определить его в документе ECMA-262 :-) – Pointy