https://en.wikipedia.org/wiki/GB_18030

GB 18030-2022 was enforced from 1 August 2023.
It has been implemented in Java 21, and in ICU 73.2.

То есть, английские программы, используя сишную библиотеку ICU могут выводить строки во внешней кодировке GB 18030-2022.

До GB 18030-2022 была GB 18030-2005,

до этого была
GB 18030-2000 Information Technology—Chinese coded character set for information interchange — Extension for the basic set
GB 18030 умеет выводить русские буквы

до этого была кодировка
GBK

A common base code page standard for Chinese is GB 2312-1980. It encodes more than 6000 frequently used Chinese ideographs. With the growing importance of Unicode and the parallel standard ISO 10646 (which was adopted by China as GB 13000), an extension of GB 2312-1980 was created. This extension was called GBK; it encoded all 20 902 unified ideographs that are assigned in Unicode 2.1. GBK is not a formal standard, but is a widely implemented specification.

Unicode 3.0 added more than 6000 ideographs, and version 3.1 added about 42 000 additional ideographs.

GB 18030 was created as an update of GBK for Unicode 3.0 with an extension that covers all of Unicode. It has the following general features:

    GB 18030 character assignments are compatible with the GB 2312-1980 standard and the GBK specification.
    The mapping table between GB 18030 and Unicode is compatible with the one between GB 2312-1980 and Unicode. With some exceptions (with the one between GBK and Unicode), most of the changes compared to the GBK mapping table are due to updates for Unicode 3.0.
    GB 18030 specifies a mapping table that covers all Unicode code points. It is functionally similar to a UTF (Unicode Transformation Format) while maintaining compatibility of GB-encoded text with GBK and GB 2312-1980.

оттуда - https://www.ibm.com/docs/en/i/7.4?topic … e-standard

zh_CN.GB18030
локаль определяет языковые и региональные настройки для китайского языка (zh_CN) с использованием кодировки GB 18030-2005 (GB18030).
доступность этой локали зависит от дистрибутива Linux, который вы используете. Не все дистрибутивы могут поддерживать эту локаль из коробки,
и может потребоваться дополнительная настройка.

sudo locale-gen zh_CN.GB18030

Чтобы программа начала использовать локаль zh_CN.GB18030 при выводе, вы можете установить эту локаль
как текущую локаль для вашей сессии терминала. Вы можете сделать это с помощью следующей команды:

export LC_ALL=zh_CN.GB18030

Программно это можно сделать так:
setlocale(LC_ALL, "zh_CN.GB18030");

функция nl_langinfo() возвращает текущую кодировку

Итак, в принципе, можно
1) настроить Linux работать в китайской кодировке (установить локаль, настроить шрифты)
2) все тексты снаружи хранить в китайской кодировке
3) при считывании и при записи обрабатывать локаль и
переводить считанное во внутреннюю кодировку (но зачем, если можно обрабатывать прямо)

Мы подробно изучили, как выводить символы в кодировке UTF-8, но пока не умеем работать в GB18030.
Это несправедливо по отношению к китайцам.

Отредактировано Лис (2025-01-16 18:07:45)