Расширенный код 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-битных байтов 0x21–7E или, альтернативно, 0xA1–FE, если восьмой бит доступен. Это позволяет использовать наборы из 94 графических символов, или 8836 (94 2 ) символов, или 830 584 (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 , такой как US-ASCII , ISO 646:KR ( KS X 1003 ) или ISO 646:JP (нижняя половина JIS X 0201 ), и вызывается через GL (т. е. 0x21–0x7E, при этом старший бит очищен). [1] Если используется US-ASCII, это делает код расширенной кодировкой ASCII ; Наиболее распространенным отклонением от US-ASCII является то, что 0x5C ( обратная косая черта в US-ASCII) часто используется для обозначения знака иены в EUC-JP (см. ниже) и знака вон в EUC-KR.
Другие наборы кодов вызываются через GR (т.е. с набором старших битов). Следовательно, чтобы получить форму EUC символа, устанавливается старший бит каждого байта кодирования (что эквивалентно добавлению 128 к каждому 7-битному байту кодирования или добавлению 160 к каждому числу в коде кутен ); это позволяет программному обеспечению легко определить, принадлежит ли конкретный байт в строке символов коду 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, разработанной пекинской компанией Founder Technology (теперь устаревшей из-за ее новой системы набора текста FITS). Код 748 содержит весь код GB 2312 , но не соответствует стандарту ISO 2022 и, следовательно, не является настоящим кодом EUC. (Он использует 8-битный ведущий байт, но различает второй байт с установленным старшим битом и один с очищенным старшим битом, и, следовательно, по структуре больше похож на Big5 и другие DBCS , не соответствующие ISO 2022. системы кодирования.) Часть кода 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 соответствует варианту Apple Shift_JIS .
Помимо этих изменений в диапазоне ведущих байтов, другой отличительной особенностью двухбайтовой части 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] в то время как 3,0% веб-сайтов на японском языке используют эту кодировку [17] (реже, чем Shift JIS или UTF-8 ). IBM называет ее кодовой страницей 954 . [18] [19] Microsoft имеет два номера кодовых страниц для этой кодировки (51932 и 20932).
Эта схема кодирования позволяет легко смешивать 7-битный ASCII и 8-битный японский язык без необходимости использования escape-символов, используемых в 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-КР).
Однако некоторые кодировки, зависящие от поставщика, частично совместимы с EUC-JP из-за кодирования JIS X 0208 поверх GR, но не соответствуют упакованной структуре EUC. Часто они не включают использование одиночных смен из EUC-JP и, таким образом, не являются прямым продолжением EUC-JP, за исключением кандзи Super DEC.
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 (Интерактивная информационная система кандзи), используемая Data General, напоминает EUC-JP без одиночных сдвигов, т.е. только с наборами кодов 0 и 1. Вместо этого катакана половинной ширины включена в строку 8 JIS X 0208 (конфликт с полем- символы рисования, добавленные в стандарт в 1983 году). Строки с 9 по 12 JIS X 0208 используются для символов, определяемых пользователем. [28] [29]
KEIS (Расширенная информационная система обработки кандзи) — это кодировка EBCDIC , используемая Hitachi [29] с двухбайтовыми символами (кодировка DBCS-Host), включенными с использованием последовательностей сдвига, что делает ее кодировкой с отслеживанием состояния . В частности, последовательность 0x0A 0x41
переключается в однобайтовый режим, а последовательность 0x0A 0x42
переключается в двухбайтовый режим. [b] Однако символы JIS X 0208 кодируются с использованием тех же последовательностей байтов, которые используются для их кодирования в EUC-JP. Это приводит к дублированию кодировок для идеографического пространства — 0x4040 согласно структуре кода DBCS-Host и 0xA1A1, как в EUC-JP. Это отличается от кодировки IBM DBCS-Host для японского языка, структура которой основана на версиях, предшествующих JIS X 0208. Диапазон ведущих байтов расширен до 0x59, из которых ведущие байты 0x81–A0 предназначены для определяемых пользователем символов, [28] , а остальные используются для корпоративных символов, включая как кандзи, так и не-канджи. [29]
JEF (расширенная функция японской обработки) [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 для целей кутен , хотя строка 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 ) или US-ASCII , в зависимости от варианта. KS X 2901 (ранее KS C 5861 ) определяет кодировку, а в RFC 1557 она названа EUC-KR.
Символ, взятый из KS X 1001 (G1, кодовый набор 1), кодируется как два байта в GR (0xA1–0xFE), а символ из KS X 1003 или US-ASCII (G0, кодовый набор 0) занимает один байт в GL ( 0x21–0x7E).
В Республике Корея его обычно называют Вансон ( корейский : 완성 , латинизированный : Вансон , букв. «предварительно составленный [33] ») . IBM называет двухбайтовый компонент кодовой страницей 971 , [34] , а EUC-KR с ASCII — кодовой страницей 970 . [35] [36] [37] Он реализован как кодовая страница 20949 («корейский Wansung») [38] [39] и кодовая страница 51949 («корейский EUC») от Microsoft. [38]
По состоянию на февраль 2024 года [обновлять]менее 0,08% всех веб-страниц в мире используют EUC-KR, [40] , но 4,7% веб-страниц Южной Кореи используют EUC-KR, [41] Включая расширения, это наиболее широко используемая устаревшая кодировка символов. в Корее на всех трех основных платформах ( macOS , других Unix-подобных ОС и Windows), но его использование очень медленно переходит на UTF-8 по мере того, как он набирает популярность, особенно в Linux и macOS.
Как и большинство других кодировок, UTF-8 теперь предпочтительнее для нового использования, поскольку решает проблемы согласованности между платформами и поставщиками.
Распространенным расширением EUC-KR является унифицированный код хангыль ( 통합형 한글 코드 , Tonghabhyeong Hangeul Kodeu , [42] или 통합 완성형 , Tonghab Wansunghyung ), который является корейской кодовой страницей по умолчанию в Microsoft Windows. Ему присвоен номер кодовой страницы 949 от Microsoft и 1261 [43] или 1363 [44] от IBM. Кодовая страница IBM 949 — это другое, несвязанное расширение EUC-KR.
Единый код хангыля расширяет EUC-KR за счет использования кодов, которые не соответствуют структуре EUC, для включения дополнительных блоков слогов, дополняя охват составных блоков слогов, доступных в Johab и Unicode. Стандарт кодирования W3C / WHATWG , используемый HTML5 , включает расширения Unified Hangul Code в определение 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] Многие из этих символов не имеют точных сопоставлений Юникода, и программное обеспечение 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-КП. [48] Более поздние редакции стандарта расширяют представление EUC символами с использованием двухбайтовых кодов, не относящихся к EUC, аналогично унифицированному коду хангыль. [49]
Хотя некоторые однобайтовые кодировки, такие как серия ISO/IEC 8859, технически соответствуют структуре EUC, они редко обозначаются как EUC. Однако в SolariseucTH
он используется как обозначение TIS-620 . [50]
EUC-TW — это кодировка переменной длины , поддерживающая US-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
массиве позже в файле.