Допустима ли эта строка Google Closure UTF-8? - PullRequest
0 голосов
/ 25 августа 2018

В Google Closure UTF-8 в байтовый массив тестов - это строка

\u0000\u007F\u0080\u07FF\u0800\uFFFF

, которая должна быть преобразована в массив

[0x00, 0x7F, 0xC2, 0x80, 0xDF, 0xBF, 0xE0, 0xA0, 0x80, 0xEF, 0xBF, 0xBF]

Я пробовал несколько других реализаций массива JavaScript и TypeScript UTF-8-to-byte, и они утверждают, что строка UTF-8 недопустима.

Строка, как представляется, охватывает значения, которые переходят от 1 байта кОт 2 до 3 байтов.

Правильно ли Google или другие библиотеки?

1 Ответ

0 голосов
/ 31 августа 2018

Google правильный.

Строка '\u0000\u007F\u0080\u07FF\u0800\uFFFF' представляет кодовые точки Unicode U+0000 U+007F U+0080 U+07FF U+0800 U+FFFF.

Буква этих кодовых точек в UTF-8 действительно является байтами00 7F C2 80 DF BF E0 A0 80 EF BF BF, как говорит Google.

Обратите внимание, что U+FFFF - это не символьная кодовая точка в соответствии со стандартом Unicode :

«Не символ» - это кодовая точка, которая постоянно зарезервирована в стандарте Unicode для внутреннего использования

...

В Unicode 1.0 кодовые точки U + FFFE иU + FFFF были помечены в диаграммах кодов как «Не коды символов» и вместо того, чтобы иметь фактические имена, были помечены как «НЕ ХАРАКТЕР».Термин «нехарактерный» в более поздних версиях стандарта произошел от этих ранних аннотаций и меток.

В частности:

В: Предназначены ли нехарактеры для обмена?

A: Нет. Они предназначены для внутреннего использования.Например, они могут быть использованы внутри как особый вид заполнителя объекта в строке.Или же они могут быть использованы при настройке параметров сортировки в качестве цели для взвешивания, которое находится между весами для «реальных» символов различных сценариев, что упрощает поддержку реализаций «алфавитного индекса».

Q: Запрещены ли взаимозаменяемые нехарактеры?

A: Этот вопрос привел к некоторой полемике , поскольку стандарт Unicode был несколько двусмысленным в отношении статуса нехарактерных символов.Формальная формулировка определения «нехарактерный» в стандарте всегда указывала на то, что нехарактерные «никогда не должны взаимозаменяться». Это привело к тому, что некоторые люди предположили, что определение на самом деле означало «не должны быть взаимозаменяемыми» и что, следовательно, присутствие нехарактера в любой строке Unicode немедленно сделало эту строку искаженной в соответствии со стандартом. Но предполагаемое использованиеnoncharacters требует возможности обмениваться ими в ограниченном контексте, по крайней мере, через API и даже через файлы данных и другие средства «обмена», так что они могут быть обработаны, как предполагалось.Выбор слова «следует» в первоначальном определении был преднамеренным и указывал на то, что не следует пытаться взаимозаменять нехарактеры именно потому, что их интерпретация является строго внутренней по отношению к той реализации, в которой они используются , поэтому они не имеют публично взаимозаменяемойсемантика.Но другие информативные формулировки в тексте основной спецификации и в списке имен персонажей были по-разному и более сильно сформулированы, что привело к противоречивым толкованиям.

Учитывая эту двусмысленность намерений, в 2013 году UTC выпустил Исправление# 9 , который исключил фразу «и это никогда не следует взаимозаменять» из определения нехарактеров, чтобы прояснить, что запрет на обмен не является частью формального определения нехарактеров.Исправление № 9 включено в базовую спецификацию для Unicode 7.0.

Q: Являются ли недопустимые символы недопустимыми в строках Unicode и UTF?

A: Абсолютно нет.Номера символов не приводят к неправильному формированию строки Юникода в любом UTF.Это можно четко увидеть в приведенной выше таблице, где каждая кодовая точка нехарактера имеет правильно сформированное представление в UTF-32, в UTF-16, и в UTF-8 .Реализация, которая преобразует кодовые точки, не являющиеся символами, между одним представлением UTF и другим, должна правильно сохранять эти значения.Тот факт, что они называются «нехарактерными» и не предназначены для открытого обмена, не означает, что они каким-то образом являются недопустимыми или недопустимыми кодовыми точками, которые делают строки, содержащие их, недействительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...