Чем Unicode 5 отличается от Unicode 2 (ECMAScript 4)?
Пожалуйста, извините, мне действительно нужно знать, как работает встроенная версия Unicode (5) в ECMAScript 4. Мне просто нужно знать, как она кодируется или декодируется, или какую кодировку использует ECMAScript 4. Я говорю о кодировке, используемой для кодов символов (или, думаю, кодовых точек) строк.
Совет: "ультрапроходы" здесь означают "больше чем", или, например, далее. Я думал, что это действительно на английском языке.
Я в основном думал, что это был UTF-16, но для моих тестов он пропускает U+10FFFF. Максимальный код символа, который я получил, используя ECMAScript 4, без исключений, был U+FFFFFF, за исключением того, что когда я использую String.fromCharCode()
кодировать этот код символа, это приводит к U+1FFFFF (\u{...}
генерирует до 0xFFFFFF
разные персонажи, но String.fromCharCode()
генерирует до 0x1FFFFF
разные персонажи). В кодовых точках ECMAScript 6 максимум, что я могу получить, это U+10FFFF, небольшая разница, и поскольку он использует UCS-2 (по крайней мере, в моем браузере, Chrome), ECMAScript 6 генерирует больше единиц кода (кодовая единица = 2 байта), и я предполагаю, что в ECMAScript 6 произошел небольшой сбой при кодировании кодовых точек с использованием UCS-2 (хотя это не ошибка, просто небольшой сбой), просто проверьте мой вопрос, если хотите знать.
0xFFFFFF
это максимальный код символа (или кодовая точка...?). Почему я думаю, что это код в ECMAScript 4? Может потому что нет String#codePointAt
а также String#fromCodePoint
как в ECMAScript 6, и он действительно выходит из UCS-2. Сначала позвольте мне показать вам несколько тестов с использованием ECMAScript 4:
(Да, ECMAScript 4 никогда не существовал, но черновик, включая незаконченную виртуальную машину для оценки ECMAScript 4. http://ecmascript.org/ не работает, но все еще на http://archive.org/, поэтому я сделал небольшую копию в 7Zip файле)
// Decimal: 16777215
const ch = 0xffffff;
const chString = '\u{ffffff}';
// Ultrapasses the maximum char code (or code point), then
// an exception got thrown, well.
'\u{1000000}';
// Ultrapasses it too, but returns '\u{ charCode % 1000000 }' anyways.
String.fromCharCode(ch + 1);
// Correct.
chString.charCodeAt(0); // Code: 16777215
// I didn't expect this!!! \/
String.fromCharCode(ch); // Gives me '\u{1fffff}' back.
// An Unicode char code (which is code point, I think) is always
// equivalent to one character in the string.
chString.length; // 1
String.fromCharCode(ch).length; // 1
Обзор ECMAScript 4 не говорит об этом больше, он только упоминает, что он включает Unicode 5, но не кодировку. Какая кодировка включена в этом случае? Также было бы приятно узнать, почему String.fromCharCode(charCode)
отличается от \u{...}
Код Unicode экранируется приведенными выше примерами.