В чем смысл индикатора XXX в диаграммах Unicode

Рассмотрим диаграмму Unicode для C1 Controls и дополнения Latin-1 в Unicode Charts. Если символ имеет глиф, показано, что если он не имеет глифа, задается специальная пунктирная линия и символический маркер или идентификатор. В этом случае как 0080, так и 0081, кажется, есть некоторый "недопустимый маркер", который, как мне кажется, означает "XXX". Это то, что это значит?

Во-вторых, каково должно быть поведение типа строки с поддержкой Unicode, которая имеет значение, хранящееся в строке значения 0x80 (hex) или 128 (десятичная)? Если он будет преобразован в какую-либо другую точку, например, такую ​​как:

  • Значение байта 128 во многих кодовых документах ANSI является маркером EURO.
  • Сохранение 128 десятичного значения эквивалентно сохранению U + 20AC?

Магия "неортогональности", с которой я столкнулся в конкретной реализации API или операционной системы API своих типов MBCS и Unicode, а также интересная обработка Java, заставляет меня задаться вопросом, каково реальное предполагаемое использование символа U + 0080? Эта ссылка меня смущает, показывая, что Java рассматривает этот символ как символ евро (кодовая страница ANSI для Unicode в одностороннем порядке), но это имя , что я не знаю, как с этим бороться. Википедия говорит, что это PAD здесь

Может ли кто-нибудь мне помочь? Я пропустил день основополагающих концепций в Unicode School? Что мне не хватает?

Обновление Блок от 0080 до 0098 - это непечатаемые управляющие символы. Этого я знаю. Интересно, что означает XXX и как мне думать об этом персонаже, когда я обрабатываю данные Unicode с этим значением в нем?

1 ответ

Согласно объяснению в гл. 17 (О диаграммах кода) Unicode Standard, стр. 573, "Конвенция с пунктирной коробкой", символы, которые не имеют видимого рендеринга как таковые, представлены квадратным пунктирным полем. Этот квадрат окружает короткую мнемоническую аббревиатуру имени персонажей ". Символами, указанными в вопросах, являются контрольные символы в области C1 Controls.

Стандарт Unicode гласит, в гл. 16, с. 544, о C0 и C1 Элементы управления: "Стандарт Unicode обеспечивает целостную замену этих кодовых точек, не добавляя и не вычитая из их семантики. Семантика управляющих кодов полностью определяется приложением, с которым они используются Однако в отсутствие конкретных применений приложений они могут интерпретироваться в соответствии с семантикой функции управления, указанной в ИСО/МЭК 6429: 1992". И сокращения в квадратных пунктирных ящиках отражают значения, приведенные в ИСО/МЭК 6429: 1992.

Некоторые коды в области C1 Controls не определены в ISO/IEC 6429: 1992. Для них, например, U + 0080, кодовая диаграмма вместо "мнемонической аббревиатуры" имеет "XXX". Таким образом, это указывает на то, что стандарт Unicode не ссылается на какой-либо смысл для этих кодовых точек, помимо их управляющих символов с некоторыми абстрактными свойствами.

Таким образом, "XXX" не означает "недействительный", а скорее "полностью undefined означает". Значение таких кодовых точек может быть определено различными стандартами или другими соглашениями, если они согласуются с общими определениями - например, было бы несовместимо определять U + 0080 как графический символ.

Такие кодовые точки не должны быть заменены или опущены при любой обработке на уровне символов; приложения, которые фактически изменяют данные, могут делать все, что они хотят, но любые общие процедуры преобразования, например, должны сохранять эти кодовые точки (символы) неповрежденными. Они не должны рассматриваться как искаженные или недействительные; но приложение может рассматривать их как undefined. По принципам Unicode, его ОК, чтобы не знать о характере, но не совсем ошибается в этом.

Это не имеет никакого отношения к значению байтов, таких как 0x80, в 8-битных кодах, таких как Windows-1252. Но если вы отправляете, например, данные, помеченные как ISO-8859-1 (где, например, 0x80 в принципе U + 0080), в веб-браузер, на самом деле будут обрабатываться как кодированные Windows-1252. Причина в том, что такие символы, как U + 0080, практически никогда не используются в данных ISO-8859-1; появление 0x80 в данных, помеченных ISO-8859-1, практически всегда либо с метками, либо с испорченными данными Windows-1252, которые не могут быть осмысленно обработаны. Поэтому браузеры используют практический маршрут и обрабатывают ISO-8859-1 как windows-1252; это формализовано в HTML5 и соответствующих спецификациях.

licensed under cc by-sa 3.0 with attribution.