BMP является Basic Multilingual Planeстроки JavaScript за пределами BMP
Согласно JavaScript: хорошие части:
JavaScript был построен в то время, когда Unicode был 16-битный набор символов, так что все символы в формате JavaScript имеют ширину 16 бит.
Это заставляет меня думать, что JavaScript использует UCS-2 (не UTF-16!) И может обрабатывать символы только до U + FFFF.
Дальнейшее исследование подтверждает это:
> String.fromCharCode(0x20001);
Метод fromCharCode
, кажется, используют только самые низкие 16 бит при возврате символа Unicode. Попытка получить U + 20001 (унифицированный идеолог CJK 20001) вместо этого возвращает U + 0001.
Вопрос: возможно ли обработать символы после BMP в JavaScript?
2011-07-31: слайд двенадцать из Поддержка Unicode выбывание: The Good, The Bad, & (в основном) Гадкий охватывает вопросы, связанные с этим довольно хорошо:
Если он использует UTF-16, то можно ожидать, что символы, находящиеся за пределами базовой многоязычной плоскости, будут поддерживаться с использованием суррогатных пар. Почему вы ожидаете, что он примет 32-битный символ? –
Большое спасибо за это, я так и не подумал об этом. –
@MichaelAaronSafyan: Поскольку JavaScript не имеет ничего похожего на тип «char», а 'String.fromCharCode()' возвращает строку, кажется справедливым ожидать, что она вернет строку, содержащую оба блока кода, которые составляют символ. Я верю, что будет 'String.fromCodePoint()' добавлен в будущий стандарт JavaScript, чтобы сделать именно это. – hippietrail