GB 18030

GB 18030 является китайским государственным стандартом, который описывается как информационная технология - набор символов с китайским кодированием и определяет необходимую языковую и персональную поддержку, необходимую для программного обеспечения в Китае. GB18030 является зарегистрированным именем Интернета для официального набора символов Китайской Народной Республики (КНР), заменяющего GB2312. Как формат преобразования Юникода (т. Е. Кодирование всех кодовых кодов Юникода), он совместим с устаревшими кодировками, включая GB2312, CP936 и GBK 1.0, GB18030 поддерживает как упрощенные, так и традиционные китайские символы.

В дополнение к «кодировке символов GB18030» этот стандарт содержит требования о том, какие скрипты должны поддерживаться, поддержка шрифтов и т. Д.

## История

Набор символов GB18030 формально называется «Китайский национальный стандарт GB 18030-2005: Информационные технологии - набор символов с китайским кодированием». GB аббревиатура Guójiā Biajozhǔn (国家标准), что означает национальный стандарт на китайском языке. Стандарт был опубликован Китайской стандартной прессой, Пекин, 8 ноября 2005 года. Только часть стандарта является обязательной. С 1 мая 2006 года поддержка обязательного подмножества официально требуется для всех программных продуктов, продаваемых в КНР.

Более ранняя версия стандарта, известного как «Китайский национальный стандарт GB 18030-2000: Информационные технологии - кодированный набор символов китайской идеограммы для обмена информацией - Расширение для базового набора», опубликован 17 марта 2000 года. Схема кодирования остается неизменной в новой версии, и единственное отличие в отображении GB-to-Unicode заключается в том, что GB 18030-2000 сопоставил символ A8 BC (ḿ) с частным кодом U + E7C7 и символом 81 35 F4 37 (без указания какого-либо символа) до U + 1E3F (ḿ), тогда как GB 18030-2005 свопирует эти два назначения сопоставления: 534 Дополнительные коды теперь связаны с символами из-за обновления Unicode, особенно появление Расширение унифицированных идеологов CJK B. Некоторые символы, используемые этническими меньшинствами в Китае, такие как монгольские персонажи и тибетские персонажи (GB 16959-1997 и GB / T 20542-2006), также были добавлены, что объясняет переименование стандарта.

По сравнению с его предками, сопоставление GB 18030 с Unicode было изменено для 81 символа, которому условно присвоена точка кода UIC (U + E000-F8FF) Unicode в GBK 1.0 и которая впоследствии была закодирована в Юникоде. Это указано в Приложении E GB 18030.:534:499 В GB 18030-2005 имеется 24 символа, которые по-прежнему отображаются в Unicode PUA.

## В качестве национального стандарта

Обязательная часть GB 18030-2005 состоит из 1 байтовой и 2-байтовой кодировки вместе с 4-байтовой кодировкой для расширения CJK Unified Ideographs. Соответствующие кодовые точки Юникода этого подмножества, включая временные частные назначения, целиком лежат в BMP: 3 Эти части соответствуют полностью обязательной GB 18030-2000.

Большинство крупных компьютерных компаний уже стандартизировали некоторую версию Unicode в качестве основного формата для использования в своих двоичных форматах и вызовах ОС. Однако в основном они поддерживали только кодовые точки в BMP, первоначально определенном в Unicode 1.0, который поддерживал только 65536 кодовых точек и часто кодировался в 16 бит как UCS-2.

В историческом значении для программного обеспечения, поддерживающего Unicode, КНР решила оказать поддержку определенным кодам за пределами BMP. Это означает, что программное обеспечение больше не может уйти с обработкой символов как 16-битных объектов с фиксированной шириной (UCS-2). Поэтому они должны либо обрабатывать данные в формате переменной ширины (например, UTF-8 или UTF-16), которые являются наиболее распространенными вариантами, либо переходить на больший формат фиксированной ширины (например, UCS-4 или UTF-32 ). Microsoft внесла изменения с UCS-2 в UTF-16 с Windows 2000.

## Преобразование

GB 18030 определяет один (ASCII), два (расширенный GBK) или четырехбайтовый (UTF) кодирование. Двухбайтовые коды определяются в таблице поиска, тогда как четырехбайтовые коды определяются последовательно (следовательно, алгоритмически) для заполнения в противном случае незакодированных частей в UCS. GB 18030 наследует плохие аспекты GBK, особенно необходимо специальный код для безопасного поиска символов ASCII в последовательности GB18030.

### **GB 18030 кодирование**

Одно- и двухбайтовые кодовые точки по существу являются GBK с знаком euro, сопоставлениями PUA для неназначенных / определяемых пользователем точек и вертикальными пунктуациями. Четыре байтовую схему можно представить как состоящую из двух единиц, каждый из двух байтов. Каждый блок имеет аналогичный формат с двухбайтовым символом GBK, но с диапазоном значений для второго байта 0x30-0x39 (коды ASCII для десятичных цифр). Как и раньше, первый байт имеет диапазон от 0x81 до 0xFE. Это означает, что процедура поиска строк, безопасная для GBK, также должна быть достаточно безопасной для GB18030 (почти так же, как обычная байт-ориентированная поисковая процедура является достаточно безопасной для EUC).

Это дает в общей сложности 1587 600 (126 × 10 × 126 × 10) возможных 4 байтовых последовательностей, что достаточно просто, чтобы охватить назначенные, зарезервированные и нехарактерные коды кода Unicode 1,112,064 (17 × 65536 - 2048 суррогатов).

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

```
U+00DE (Þ) → 81 30 89 37
U+00DF (ß) → 81 30 89 38
U+00E0 (à) → A8 A4
U+00E1 (á) → A8 A2
U+00E2 (â) → 81 30 89 39
U+00E3 (ã) → 81 30 8A 30

```

Таблица смещения используется в версии WHATWG и W3C GB 18030 для эффективного перевода кодовых точек. ICU и glibc используют аналогичные определения диапазонов, чтобы избежать потери пространства на больших последовательных блоках.

## Поддержка

### Кодирование

Windows 2000 может поддерживать кодировку GB18030, если установлен пакет поддержки GB18030. Windows XP может поддерживать его изначально. База данных PostgreSQL с открытым исходным кодом поддерживает GB18030 благодаря полной поддержке UTF-8, т. Е. Путем преобразования его в UTF-8 и из него. Аналогично, Microsoft SQL Server поддерживает GB18030 путем преобразования в UTF-16 и обратно.

Более конкретно, поддержка кодирования GB18030 в Windows означает, что код Page 54936 поддерживается MultiByteToWideChar и WideCharToMultiByte. Из-за обратной совместимости сопоставления многие файлы в GB18030 могут быть фактически успешно открыты как устаревший код 936, то есть GBK, даже если код Страница 54936 не поддерживается. Однако это справедливо только в том случае, если файл содержит только символы GBK. Загрузка приведет к ошибке или приведет к повреждению результата, если файл содержит символы, которые не существуют в GBK.

GNU glibc gconv, библиотека кодеков символов, используемая в большинстве дистрибутивов Linux, поддерживает GB 18030-2000 с версии 2.2 и GB 18030-2005 с версии 2.14; glibc, в частности, включает в себя не-PUA-сопоставления для GB 18030-2005 для обеспечения конверсии в оба конца. GNU libiconv, альтернативная реализация iconv, часто используемая в не-glibc UNIX-подобных средах, таких как Cygwin, поддерживает GB 18030 с версии 1.4.

### Глифы

Пакет поддержки GB18030 для Windows содержит SimSun18030.ttc, файл коллекции шрифтов TrueType, который объединяет два китайских шрифта, SimSun-18030 и NSimSun-18030. Шрифт SimSun 18030 включает в себя все символы в Unicode 2.1 плюс новые символы, найденные в блоке Unicode CJK Unified Ideographs Extension A, но, несмотря на его имя, он не содержит глифов для всех символов GB 18030, так как весь (около миллиона) код Unicode точки до U + 10FFFF могут быть закодированы как GB 18030. Сертификация соответствия GB 18030 требует только правильной обработки и распознавания глифов в обязательной (двухбайтовой) китайской части.

Другие семейства шрифтов CJK, такие как HAN NOM и Hanazono Mincho, обеспечивают более широкий охват блоков расширения Unicode CJK, чем SimSun-18030 или даже Simsun (Founder Extended), но они также не поддерживают все кодовые точки, определенные в Unicode 5.0.0.