редактор utf8, javascript spec ожидает utf16

61
5

Спецификация ECMAScript гласит следующее:

Когда строка содержит фактические текстовые данные, каждый элемент считается единым модулем кода UTF-16. Независимо от того, является ли это фактическим форматом хранения строки, символы внутри строки нумеруются по их исходной позиции элемента кода, как если бы они были представлены с использованием UTF-16. Все операции над строками (кроме как указано иначе) рассматривают их как последовательности недифференцированных 16-разрядных целых без знака; они не гарантируют, что результирующая строка находится в нормализованной форме, и они не гарантируют результаты, чувствительные к языку.

источник: http://ecma-international.org/ecma-262/5.1/#sec-8.4

Я писал javascript в течение многих лет с моим редактором, настроенным в кодировке utf8. Почему у меня никогда не возникало проблемы со строками? Я отправляю в основном код на простом английском языке с ocasional emoji. Почему у меня никогда не возникало проблемы с тем, что мой код был закодирован в utf8, в то время как спецификация говорит, что вам нужен utf16?

спросил(а) 2021-01-19T20:19:55+03:00 2 месяца, 3 недели назад
1
Решение
61

Вы приводите раздел о типе строки, который относится к представлению строк во время выполнения, с которым работает JavaScript-код, например, он говорит, как должен вести себя вызов charAt.

Текстовый формат и кодировка исходного кода JavaScript - это совершенно другое дело. Для этого вам нужно будет прочитать раздел 6 "Исходный текст". По общему признанию, в нем говорится, что синтаксический анализатор также работает с 16-разрядными кодовыми единицами текста (однако он предполагает, что они нормированы по юникоду). В нем также указывается

Если фактический исходный текст закодирован в форме, отличной от 16-разрядных кодовых единиц, она должна обрабатываться так, как если бы она была сначала преобразована в UTF-16.

Поэтому, когда вы отправляете файлы JS, закодированные как UTF-8 (который в значительной степени стандартный), и отправляете соответствующие заголовки, браузер расшифровывает UTF-8 и анализирует результат в соответствии с правилами грамматики.

ответил(а) 2021-01-19T20:19:55+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема