Расширенный код Unix ( EUC ) — это многобайтовая система кодирования символов , используемая в основном для японского , корейского и упрощенного китайского языков (иероглифов) .
Наиболее часто используемые коды EUC представляют собой кодировки переменной длины, в которых символ, принадлежащий набору кодированных символов, совместимому с ISO/IEC 646 (например, ASCII ), занимает один байт, а символ, принадлежащий набору кодированных символов 94×94 (например, GB 2312 ), представлен двумя байтами. Форма EUC-CN GB 2312 и EUC-KR являются примерами таких двухбайтовых кодов EUC. EUC-JP включает символы, представленные тремя байтами, включая начальный код сдвига , тогда как один символ в EUC-TW может занимать до четырех байтов.
Современные приложения, скорее всего, используют UTF-8 , который поддерживает все глифы кодов EUC и многое другое, и, как правило, более переносим с меньшим количеством отклонений и ошибок поставщиков. Однако EUC по-прежнему очень популярен, особенно EUC-KR для Южной Кореи.
Структура EUC основана на стандарте ISO/IEC 2022 , который определяет систему графических наборов символов, которые могут быть представлены последовательностью 94 7-битных байтов 0x 21–7E или, альтернативно, 0xA1–FE, если доступен восьмой бит. Это позволяет использовать наборы из 94 графических символов, или 8836 (94 2 ) символов, или 830584 (94 3 ) символов. Хотя изначально 0x20 и 0x7F всегда были символами пробела и удаления , а 0xA0 и 0xFF не использовались, более поздние издания ISO/IEC 2022 разрешили использовать байты 0xA0 и 0xFF (или 0x20 и 0x7F) в наборах при определенных обстоятельствах, что позволяет включать 96-символьные наборы. Диапазоны 0x00–1F и 0x80–9F используются для кодов управления C0 и C1 .
EUC — это семейство 8-битных профилей ISO/IEC 2022 , в отличие от 7-битных профилей, таких как ISO-2022-JP . Таким образом, только наборы символов, совместимые с ISO 2022, могут иметь формы EUC. С помощью схемы EUC можно представить до четырех кодированных наборов символов (называемых G0, G1, G2 и G3 или кодовыми наборами 0, 1, 2 и 3). Набор G0 устанавливается на кодированный набор символов, совместимый с ISO/IEC 646, такой как ASCII , ISO 646:KR ( KS X 1003 ) или ISO 646:JP (нижняя половина JIS X 0201 ), и вызывается поверх GL (т. е. 0x21–0x7E, со сброшенным старшим битом). [1] Если используется ASCII, это делает код расширенной кодировкой ASCII ; Наиболее распространенным отклонением от ASCII является то, что 0x5C ( обратная косая черта в ASCII) часто используется для представления знака иены в EUC-JP (см. ниже) и знака воны в EUC-KR.
Другие кодовые наборы вызываются через GR (т. е. с установленным самым старшим битом). Следовательно, чтобы получить форму EUC символа, устанавливается самый старший бит каждого кодового байта (эквивалентно добавлению 128 к каждому 7-битному кодовому байту или добавлению 160 к каждому числу в коде kuten ); это позволяет программному обеспечению легко различать, принадлежит ли конкретный байт в строке символов коду ISO 646 или расширенному коду. Символы в кодовых наборах 2 и 3 имеют префикс с управляющими кодами SS2 (0x8E) и SS3 (0x8F) соответственно и вызываются через GR. Помимо начального кода сдвига, любой байт за пределами диапазона 0xA0–0xFF, появляющийся в символе из кодовых наборов 1–3, не является допустимым кодом EUC. [1]
Сам код EUC не использует последовательности объявлений и обозначений из ISO 2022. [ 1] Однако спецификация кода эквивалентна следующей последовательности из четырех последовательностей объявлений ISO 2022 , значения которых разбиваются следующим образом. [1]
Описанное выше кодирование переменной длины на основе ISO-2022 иногда называют упакованным форматом EUC , который обычно обозначается как EUC. Однако внутренняя обработка данных EUC может использовать формат преобразования фиксированной длины, называемый полным двухбайтовым форматом EUC . Это представляет: [2]
Начальные байты 0x00 и 0x80 используются в случаях, когда кодовый набор использует только один байт. Существует также четырехбайтовый формат фиксированной длины. [2] Эти форматы кодирования фиксированной длины подходят для внутренней обработки и обычно не встречаются при обмене.
EUC-JP зарегистрирован в IANA в обоих форматах: упакованный формат как "EUC-JP" или "csEUCPkdFmtJapanese" и формат с фиксированной шириной как "csEUCFixWidJapanese". [3] Только упакованный формат включен в стандарт кодирования WHATWG , используемый HTML5 . [4]
EUC-CN [6] — это обычная закодированная форма стандарта GB 2312 для упрощенных китайских иероглифов . В отличие от японских JIS X 0208 и ISO-2022-JP , GB 2312 обычно не используется в 7-битной версии кода ISO 2022 , [a] хотя вариантная форма, называемая HZ (которая разграничивает текст GB 2312 последовательностями ASCII), иногда использовалась в USENET .
Символ ASCII представлен в своей обычной кодировке. Символ из GB 2312 представлен двумя байтами, оба из диапазона 0xA1–0xFE.
Кодировка, связанная с EUC-CN, — это код «748», используемый в системе набора WITS, разработанной Beijing's Founder Technology (теперь устаревшей из-за ее новой системы набора FITS). Код 748 содержит все из GB 2312 , но не соответствует ISO 2022 и, следовательно, не является настоящим кодом EUC. (Он использует 8-битный ведущий байт, но различает второй байт с установленным старшим битом и байт с очищенным старшим битом, и, следовательно, по структуре больше похож на Big5 и другие несовместимые с ISO 2022 системы кодирования DBCS .) Часть кода 748, не относящаяся к GB2312, содержит традиционные и гонконгские символы и другие глифы, используемые в наборе газет.
Кодовая страница IBM 1381 ( CCSID 1381) включает в себя однобайтовую кодовую страницу 1115 (CPGID 1115 как CCSID 1115) и двухбайтовую кодовую страницу 1380 (CPGID 1380 как CCSID 1380), [7] которая кодирует GB 2312 так же, как EUC-CN, но отклоняется от структуры EUC, расширяя диапазон ведущих байтов обратно до 0x8C, добавляя 31 выбранный IBM символ в 0x8CE0 через 0x8CFE и добавляя 1880 определяемых пользователем символов со ведущими байтами 0x8D через 0xA0. [8]
Кодовая страница IBM 1383 (CCSID 1383) включает в себя однобайтовую кодовую страницу 367 и двухбайтовую кодовую страницу 1382 (CPGID 1382 как CCSID 1382), [9] которая отличается соответствием структуре EUC, добавлением 31 выбранного IBM символа в 0xFEE0 через 0xFEFE вместо этого и включением только 1360 определяемых пользователем символов, перемежающихся в позициях, не используемых GB 2312. [10] Альтернативный CCSID 5479 [11] используется для чистой кодовой страницы EUC-CN: он использует CCSID 9574 в качестве своего двухбайтового набора, который использует CPGID 1382, но исключает выбранные IBM и определяемые пользователем символы. [12]
GBK — это расширение GB 2312. Он определяет расширенную форму кодировки EUC-CN, способную представлять более широкий массив символов CJK, полученных в основном из Unicode 1.1 , включая традиционные китайские символы и символы, используемые только в японском языке . Однако это не настоящий код EUC, поскольку байты ASCII могут отображаться как байты хвоста (а байты C1 , не ограничиваясь одиночными сдвигами, могут отображаться как байты лида или хвоста) из-за необходимости большего пространства кодирования.
Варианты GBK реализованы в кодовой странице Windows 936 ( кодовая страница Microsoft Windows для упрощенного китайского языка) и в кодовой странице IBM 1386.
Кодировка символов GB 18030 на основе Unicode определяет расширение GBK, способное кодировать весь Unicode . Однако Unicode, закодированный как GB 18030 , является кодировкой переменной длины , которая может использовать до четырех байт на символ, поскольку требуется еще большее пространство кодирования. Будучи расширением GBK, он является надмножеством EUC-CN, но сам по себе не является настоящим кодом EUC. Будучи кодировкой Unicode, его репертуар идентичен репертуару других форматов преобразования Unicode, таких как UTF-8 .
Другие варианты EUC-CN, отклоняющиеся от механизма EUC, включают в себя упрощенный китайский шрифт Mac OS (известный как кодовая страница 10008 или x-mac-chinesesimp
). [13] Он использует байты 0x80, 0x81, 0x82, 0xA0, 0xFD, 0xFE и 0xFF для U с умлаутом (ü), два специальных символа метрики шрифта, неразрывный пробел , знак авторского права (©), знак товарного знака (™) и многоточие (...) соответственно. [6] Это отличается тем, что рассматривается как однобайтовый символ по сравнению с первым байтом двухбайтового символа как из EUC (где из них 0xFD и 0xFE определены как ведущие байты), так и из GBK (где из них 0x81, 0x82, 0xFD и 0xFE определены как ведущие байты).
Такое использование 0xA0, 0xFD, 0xFE и 0xFF соответствует варианту Shift_JIS от Apple .
Помимо этих изменений в диапазоне ведущих байтов, другой отличительной чертой двухбайтовой части Mac OS Chinese Simplified является включение двух расширений в базовый набор GB 2312-80 в строках 6 и 8. [6] Они считаются «стандартными расширениями GB 2312», ни одно из которых не является собственностью Apple: расширение строки 8 было взято из GB 6345.1 , [6] оба расширения включены в GB/T 12345 (традиционный китайский вариант GB 2312), [14] и оба расширения включены в GB 18030 (преемник GB 2312). [15]
EUC-JP — это кодировка переменной длины, используемая для представления элементов трех стандартов японских наборов символов , а именно JIS X 0208 , JIS X 0212 и JIS X 0201. Другие названия этой кодировки включают Unixized JIS (или UJIS ) и AT&T JIS . [2] 0,1% всех веб-страниц используют EUC-JP с сентября 2022 года, [16] в то время как 2,6% веб-сайтов, написанных на японском языке, используют эту вторую по популярности (для японцев) кодировку [17] (что больше, чем для Shift JIS, обе используются гораздо реже, чем UTF-8 ). IBM называет ее кодовой страницей 954. [18] [19] У Microsoft есть два номера кодовой страницы для этой кодировки (51932 и 20932).
Эта схема кодирования позволяет легко смешивать 7-битный ASCII и 8-битный японский язык без необходимости использования экранированных символов, используемых в ISO-2022-JP , который основан на тех же стандартах набора символов, и без байтов ASCII, появляющихся в качестве контрольных байтов (в отличие от Shift JIS ).
Связанная и частично совместимая кодировка, называемая EUC-JISx0213 или EUC-JIS-2004 , кодирует JIS X 0201 и JIS X 0213 [20] (аналогично Shift_JISx0213 , ее аналогу на основе Shift_JIS).
По сравнению с EUC-CN или EUC-KR, EUC-JP не получил такого широкого распространения на ПК и Macintosh в Японии, где использовался Shift JIS или его расширения ( кодовая страница Windows 932 в Microsoft Windows и MacJapanese в классической Mac OS ), хотя он стал активно использоваться в Unix или Unix-подобных операционных системах (за исключением HP-UX ). Поэтому использование японскими веб-сайтами EUC-JP или Shift_JIS часто зависит от того, какую ОС использует автор.
Символы кодируются следующим образом:
Расширения EUC-JP от поставщиков (например, Open Software Foundation , IBM или NEC ) часто размещались в отдельных кодовых наборах [25] [26] в отличие от использования недопустимых последовательностей EUC (как в популярных расширениях EUC-CN и EUC-KR).
Однако некоторые кодировки, специфичные для поставщиков, частично совместимы с EUC-JP из-за кодирования JIS X 0208 поверх GR, но не следуют упакованной структуре EUC. Часто они не включают использование одиночных сдвигов из EUC-JP и, таким образом, не являются прямыми расширениями EUC-JP, за исключением Super DEC Kanji.
Digital Equipment Corporation определяет два варианта EUC-JP, которые лишь частично соответствуют упакованному формату EUC, но также имеют некоторое сходство с полным двухбайтовым форматом. Общий формат кодировки "DEC Kanji" в основном соответствует фиксированной длине (полный двухбайтовый) EUC; однако кодовый набор 0 не обязательно должен быть дополнен слева нулевыми байтами (аналогично упакованному формату). [28] JIS X 0208, как обычно, используется для кодового набора 1; кодовый набор 2 (половинная ширина катаканы) отсутствует; Кодовый набор 3 кодируется как двухбайтовый формат фиксированной ширины (т. е. без байта сдвига и только с первым установленным старшим битом), но используется для двухбайтовых пользовательских символов, а не указан для JIS X 0212. [28] В базовой кодировке «DEC Kanji» только первые 31 строка кодового набора 3 используются для пользовательских символов: строки с 32 по 94 зарезервированы, аналогично неиспользуемым строкам в кодовом наборе 1. [29]
Кодировка «Super DEC Kanji» принимает коды как из кодировки «DEC Kanji», так и из упакованного формата EUC, всего пять кодовых наборов. [28] Она также позволяет использовать весь пользовательский кодовый набор и неиспользуемые строки в концах кодовых наборов JIS X 0208 и JIS X 0212 (строки 85–94 и 78–94 соответственно) для пользовательских символов. [29]
Hewlett-Packard определяет кодировку, называемую "HP-16". Она сопровождает их кодировку "HP-15", которая является вариантом Shift JIS . HP-16 кодирует JIS X 0208 , используя те же байты, что и в EUC-JP, но не использует коды с одним сдвигом (таким образом, опуская наборы кодов 2 и 3), и добавляет три определяемых пользователем региона, которые не следуют структуре упакованного формата EUC: [28]
Кодировка IKIS (Interactive Kanji Information System), используемая Data General, напоминает EUC-JP без одиночных сдвигов, т. е. только с кодовыми наборами 0 и 1. Вместо этого полуширинная катакана включена в строку 8 JIS X 0208 (что противоречит символам рисования прямоугольников, добавленным в стандарт в 1983 году). Строки JIS X 0208 с 9 по 12 используются для определяемых пользователем символов. [28] [29]
KEIS (Kanji-processing Extended Information System) — это кодировка EBCDIC , используемая Hitachi , [29] с двухбайтовыми символами (кодировка DBCS-Host), включаемыми с помощью последовательностей сдвига, что делает ее кодировкой с сохранением состояния . В частности, последовательность 0x0A 0x41
переключается в однобайтовый режим, а последовательность 0x0A 0x42
переключается в двухбайтовый режим. [b] Однако символы JIS X 0208 кодируются с использованием тех же байтовых последовательностей, которые использовались для их кодирования в EUC-JP. Это приводит к дублированию кодировок для идеографического пространства — 0x4040 в соответствии со структурой кода DBCS-Host и 0xA1A1 в EUC-JP. Это отличается от кодировки DBCS-Host IBM для японского языка, макет которой основан на версиях, которые в целом предшествовали JIS X 0208. Диапазон ведущих байтов расширен до 0x59, из которых ведущие байты 0x81–A0 предназначены для определяемых пользователем символов, [28] а остальные используются для определяемых корпорацией символов, включая как кандзи, так и не-кандзи. [29]
JEF (Japanese-processing Extended Feature) [29] — это кодировка EBCDIC, используемая на мэйнфреймах Fujitsu FACOM, в отличие от FMR (вариант Shift JIS), используемой на ПК Fujitsu. Как и KEIS, JEF — это кодировка с сохранением состояния, переключающаяся в двухбайтовый режим DBCS-Host с помощью сдвиговых последовательностей (где 0x29
переключение в однобайтовый режим и 0x28
переключение в двухбайтовый режим). [30] Также аналогично KEIS, коды JIS X 0208 представлены так же, как в EUC-JP. [28] Диапазон ведущих байтов расширен обратно до 0x41, при этом 0x80–0xA0 назначены для определения пользователем; ведущим байтам 0x41–0x7F назначены номера строк от 101 до 163 для целей kuten , хотя строка 162 (ведущий байт 0x7E) не используется. [28] [29] Строки с 101 по 148 используются для расширенных кандзи, а строки с 149 по 163 используются для расширенных не-кандзи. [29]
EUC-KR — это кодировка переменной длины для представления корейского текста с использованием двух кодированных наборов символов: KS X 1001 (ранее KS C 5601) [31] [32] и либо ISO 646 :KR ( KS X 1003 , ранее KS C 5636 ), либо ASCII , в зависимости от варианта. KS X 2901 (ранее KS C 5861 ) определяет кодировку, а RFC 1557 дублирует ее как EUC-KR.
Символ из KS X 1001 (G1, кодовый набор 1) кодируется как два байта в GR (0xA1–0xFE), а символ из KS X 1003 или ASCII (G0, кодовый набор 0) занимает один байт в GL (0x21–0x7E).
Обычно в Республике Корея его называют Wansung ( кор . 완성 ; RR : Wanseong ; досл. предсоставленный [33] ) . IBM называет двухбайтовый компонент кодовой страницей 971 [34] , а EUC-KR с ASCII — кодовой страницей 970 [ 35] [36] [37] Компания Microsoft реализует его как кодовую страницу 20949 («корейский Wansung») [38] [39] и кодовую страницу 51949 («корейский EUC»). [38]
По состоянию на апрель 2024 года [обновлять]менее 0,08% всех веб-страниц в мире используют EUC-KR [40], но 4,6% южнокорейских веб-страниц используют EUC-KR [41]. Включая расширения, это наиболее широко используемая устаревшая кодировка символов в Корее на всех трех основных платформах ( macOS , других Unix-подобных ОС и Windows), но ее использование очень медленно переходит на UTF-8 по мере того, как она набирает популярность, особенно в Linux и macOS.
Как и большинство других кодировок, UTF-8 теперь является предпочтительным вариантом для нового использования, что решает проблемы согласованности между платформами и поставщиками.
Распространенным расширением EUC-KR является унифицированный код хангыль ( 통합형 한글 코드 ; Tonghabhyeong Hangeul Kodeu , [42] или 통합 완성형 ; Tonghab Wansunghyung ), который является корейской кодовой страницей по умолчанию в Microsoft Windows. Microsoft присваивает ему номер кодовой страницы 949, а IBM — 1261 [43] или 1363 [44] . Кодовая страница IBM 949 — это другое, не связанное расширение EUC-KR.
Унифицированный код хангыль расширяет EUC-KR, используя коды, которые не соответствуют структуре EUC, для включения дополнительных слоговых блоков, завершая покрытие составных слоговых блоков, доступных в Johab и Unicode. Стандарт кодирования W3C / WHATWG, используемый HTML5, включает расширения унифицированного кода хангыль в свое определение EUC-KR. [45]
Другие кодировки, включающие EUC-KR как подмножество, включают корейский алфавит Mac OS (известный как кодовая страница 10003 или x-mac-korean
), [13] который использовался HangulTalk (MacOS-KH), корейской локализацией классической Mac OS . Он был разработан Elex Computer ( 일렉스 ), которая в то время была авторизованным дистрибьютором компьютеров Apple Macintosh в Южной Корее. [46] [29]
HangulTalk добавляет символы расширения с ведущими байтами между 0xA1 и 0xAD, как в неиспользуемом пространстве внутри плоскости EUC-KR GR (байты конца 0xA1–0xFE), так и с использованием не-EUC-кодов за ее пределами (байты конца 0x41–0xA0). Некоторые из этих символов являются стилизованными дингбатами , не зависящими от стиля шрифта . [29] Многие из этих символов не имеют точных отображений Unicode, и программное обеспечение Apple отображает эти случаи по-разному: в комбинированные последовательности , в приблизительные отображения с добавленным символом частного использования в качестве модификатора для целей кругового обхода или в символы частного использования. [47]
Apple также использует некоторые однобайтовые коды за пределами плоскости EUC-KR для дополнительных символов: 0x80 для обязательного пробела , 0x81 для знака воны (₩), 0x82 для короткого тире (–), 0x83 для знака авторского права (©), 0x84 для широкого подчеркивания (_) и 0xFF для многоточия (...). [47] Хотя ни один из этих дополнительных однобайтовых кодов не находится в диапазоне ведущих байтов простого EUC-KR (в отличие от расширений Apple для EUC-CN, см. выше), некоторые из них находятся в диапазоне ведущих байтов унифицированного кода хангыль (в частности, 0x81, 0x82, 0x83 и 0x84).
Подобно KS X 1001, северокорейский стандарт KPS 9566 обычно используется в форме EUC; в этих контекстах его иногда называют EUC-KP. [48] Более поздние издания стандарта расширяют представление EUC с помощью символов, использующих не-EUC двухбайтовые коды, аналогично унифицированному коду хангыль. [49]
Хотя некоторые однобайтовые кодировки, такие как серия ISO/IEC 8859, технически соответствуют структуре EUC, они редко маркируются как EUC. Однако, eucTH
используется в Solaris в качестве метки для TIS-620 . [50]
EUC-TW — это кодировка переменной длины , которая поддерживает ASCII и 16 плоскостей CNS 11643 , каждая из которых имеет размер 94×94. Это редко используемая кодировка для традиционных китайских иероглифов , используемых на Тайване . Варианты Big5 гораздо более распространены, чем EUC-TW, хотя Big5 кодирует только первые две плоскости CNS 11643 hanzi , в то время как UTF-8 становится все более распространенным.
Обратите внимание, что плоскость 1 CNS 11643 закодирована дважды как кодовый набор 1 и часть кодового набора 2.
10 65
и 10 66
), перечисленным Лунде. [28] Лунде перечисляет шестнадцатеричные формы для обоих как 0xA0 0x42
, по-видимому, по ошибке.ULMBCS_GRP_KO
и сопоставляется с "windows-949"
кодеком ICU в OptGroupByteToCPName
массиве далее в файле.