Сдвиг JIS

Кодировка японских символов
Сдвиг JIS
MIME/IANAShift_JIS
Псевдоним(ы)MS_Kanji, [1] PCK [2] [3]
Язык(и)В основном японский , но также поддерживает английский , русский , болгарский , греческий
СтандартJIS X 0208:1997 Приложение 1
КлассификацияРасширенный ISO 646 , [a] кодирование переменной ширины , кодирование CJK
РасширяетФормат JIS X 0201 8-бит
Преобразует/КодируетJIS X 0208
ПреемникShift_JIS-2004 (JIS)
Windows-31J (веб)

Shift JIS (также SJIS , имя MIME Shift_JIS , в контексте Solaris известна как PCK ) [2] [3]кодировка символов для японского языка , первоначально разработанная японской компанией ASCII Corporation [b] совместно с Microsoft и стандартизированная как JIS X 0208 Приложение 1 .

Shift JIS основан на наборах символов, определенных в стандартах JIS X 0201 :1997 (для однобайтовых символов ) и JIS X 0208 :1997 (для двухбайтовых символов ).

По состоянию на октябрь 2024 года [обновлять]0,3% обследованных веб-страниц использовали Shift JIS (фактически декодированную как ее надмножество кодировки Windows-31J ), что ниже 1,3% в июле 2014 года. [4] Shift JIS является второй по частоте заявленной кодировкой символов для японских веб-сайтов, используемой 4,4% сайтов в домене .jp, в то время как UTF-8 используется 96% японских веб-сайтов. [5] [6]

Структура

Shift JIS — это расширение однобайтовой кодировки JIS X 0201 :1997 , которое использует неназначенные кодовые точки в JIS X 0201 для кодирования двухбайтового набора символов JIS X 0208 :1997 . Ведущие байты для двухбайтовых символов «сдвинуты» вокруг 64 символов катаканы половинной ширины в однобайтовом диапазоне от 0xA1 до 0xDF .

Однобайтовые символы от 0x 00 до 0x7F соответствуют кодировке ASCII , за исключением знака йены (U+00A5) в позиции 0x5C и надчеркивания (U+203E) в позиции 0x7E вместо обратной косой черты и тильды набора символов ASCII соответственно (эти отклонения от ASCII соответствуют JIS X 0201 ). Однобайтовые символы от 0xA1 до 0xDF соответствуют полуширинным символам катаканы, которые можно найти в JIS X 0201 .

Для двухбайтовых символов первый байт всегда находится в диапазоне от 0x81 до 0x9F или в диапазоне от 0xE0 до 0xEF (в JIS X 0201 эти диапазоны не назначены ). Если первый байт нечетный, второй байт должен быть в диапазоне от 0x40 до 0x9E (но не может быть 0x7F); если первый байт четный, второй байт должен быть в диапазоне от 0x9F до 0xFC.

Shift JIS гарантирует только то, что первый байт двухбайтовых символов будет установлен в верхнем битовом диапазоне (0x80–0xFF); значение второго байта может быть как высоким, так и низким. Появление значений байтов 0x40–0x7E в качестве вторых байтов кодовых слов затрудняет надежное обнаружение Shift JIS, поскольку для символов ASCII используются одни и те же коды. Поскольку одно и то же значение байта может быть как первым, так и вторым байтом, поиск строк затруднен, поскольку простой поиск может соответствовать второму байту символа и первому байту следующего, что не является допустимым символом Shift JIS. Алгоритмы поиска строк должны быть специально разработаны для Shift JIS .

Совместимость

Shift JIS полностью обратно совместим с однобайтовой кодировкой JIS X 0201 , что означает, что любая допустимая строка JIS X 0201 также является допустимой строкой Shift JIS.

Двухбайтовые символы в JIS X 0208 необходимо преобразовать для кодирования в Shift JIS. Для двухбайтовой последовательности JIS X 0208 [ c] преобразование в соответствующие байты Shift JIS выглядит следующим образом: дж 1 дж 2 {\displaystyle j_{1}j_{2}} с 1 с 2 {\displaystyle s_{1}s_{2}}

с 1 = { дж 1 + 1 2 + 112 если  33 дж 1 94 дж 1 + 1 2 + 176 если  95 дж 1 126 {\displaystyle s_{1}={\begin{cases}\left\lfloor {\frac {j_{1}+1}{2}}\right\rfloor +112&{\mbox{if }}33\leq j_{1}\leq 94\\\left\lfloor {\frac {j_{1}+1}{2}}\right\rfloor +176&{\mbox{if }}95\leq j_{1}\leq 126\end{cases}}}
с 2 = { дж 2 + 31 + дж 2 96 если  дж 1  странно  дж 2 + 126 если  дж 1  даже  {\displaystyle s_{2}={\begin{cases}j_{2}+31+\left\lfloor {\frac {j_{2}}{96}}\right\rfloor &{\mbox{если }}j_{1}{\mbox{ нечетно }}\\j_{2}+126&{\mbox{если }}j_{1}{\mbox{ четно }}\end{cases}}}

Конкурирующий 8-битный формат EUC-JP , который не поддерживает однобайтовую полуширинную катакану, обеспечивает более чистое и прямое преобразование в кодовые точки JIS X 0208 и обратно , поскольку все байты с высоким битовым набором являются частями двухбайтового символа, а все коды из диапазона ASCII представляют однобайтовые символы.

Использование

HTML, написанный в Shift JIS, все еще может быть интерпретирован в некоторой степени, если он неправильно помечен как ASCII и если тег charset находится в верхней части самого документа, поскольку важные начало и конец тегов и полей HTML ( <, >, /, ", &, ;) кодируются теми же байтами, что и в ASCII, и эти байты не отображаются в двухбайтовых последовательностях.

Shift JIS можно использовать в строковых литералах в таких языках программирования, как C , но необходимо учитывать несколько вещей. Во-первых, что экранирующий символ 0x5C, обычно обратная косая черта , является полуширинным знаком йены (¥) в Shift JIS. Если программист знает об этом, можно использовать printf("ハローワールド¥n");(где ハローワールド — Hello, world , а ¥n — экранирующая последовательность), предполагая, что система ввода-вывода поддерживает вывод Shift JIS . Во-вторых, байт 0x5C вызовет проблемы, когда он появится как второй байт двухбайтового символа, потому что он будет интерпретирован как экранирующая последовательность, что испортит интерпретацию, если только за ним не последует еще один 0x5C.

Несколько версий

Диаграмма Эйлера, сравнивающая репертуары JIS X 0208 , JIS X 0212 , JIS X 0213 , Windows-31J , стандартный репертуар Microsoft и Unicode
Связь между вариантами Shift_JIS на ПК и связанными кодировками, включая пересечения и другие подмножества. Приведенные имена являются описательными.

Существует множество различных версий Shift JIS. Есть две области для расширения:

Во-первых, JIS X 0208 не заполняет все пространство 94×94, закодированное для него в Shift JIS, поэтому здесь есть место для большего количества символов — на самом деле это расширения JIS X 0208, а не самого Shift JIS.

Во-вторых, Shift JIS имеет больше пространства для кодирования, чем необходимо для JIS X 0201 и JIS X 0208 (см. § Карта байтов Shift JIS ниже), и это пространство может использоваться и используется для еще большего количества символов (как однобайтовых, так и двухбайтовых).

Windows-932 / Windows-31J

Самым популярным расширением является кодовая страница Windows 932 ( CCSID также используется для расширения IBM для Shift JIS ), которая зарегистрирована в IANA как «Windows-31J», [1] отдельно от Shift JIS. Она была популяризирована Microsoft, хотя сама Microsoft не признаёт название Windows-31J и вместо этого называет эту вариацию «shift_jis». [7] [8] Кодовая страница IBM 943 включает те же двухбайтовые коды, что и кодовая страница Microsoft 932, в то время как кодовая страница IBM 932 включает меньше расширений (исключая те, которые Microsoft включает из NEC), и сохраняет порядок символов из издания JIS X 0208 1978 года, вместо того чтобы реализовывать замены вариантов символов из стандарта 1983 года. [9]

Windows-31J назначает 0x5C для U+005C REVERSE SOLIDUS ( обратная косая черта ), а 0x7E для U+007E TILDE , следуя US-ASCII . [10] Однако большинство локализованных шрифтов в Windows отображают U+005C как знак йены для совместимости с JIS X 0201. [11] [12] Он включает несколько расширений, а именно « специальные символы NEC (строка 13), выбор NEC расширений IBM (строки 89–92) и расширения IBM (строки 115–119)», [1] в дополнение к выделению некоторого пространства кодировки для определения конечного пользователя . [13]

Кодовая страница Windows 932 — это версия, используемая в стандарте кодирования W3C / WHATWG , используемом HTML5 , который включает «ранее фирменные расширения IBM и NEC» из Windows-31J в своей таблице для JIS X 0208, [14] а также рассматривает метку «shift_jis» взаимозаменяемо с «windows-31j» с намерением «совместимости с развернутым содержимым». [15]

MacЯпонский

Версия Shift-JIS, происходящая из классической Mac OS (известной как x-mac-japanese, Кодовая страница 10001 [7] или MacJapanese) назначила тильду на 0x7E (следуя US-ASCII , а не JIS X 0201, который назначает здесь верхнюю черту ), а знак йены на 0x5C (как в JIS X 0201 и стандартном Shift JIS ). Она также расширила JIS X 0201 , назначив обратную косую черту на 0x80 (соответствует 0x5C в US-ASCII), неразрывный пробел на 0xA0, знак авторского права на 0xFD, символ торговой марки на 0xFE и горизонтальное многоточие половинной ширины на 0xFF. Она также добавила расширенные двухбайтовые символы; включая 53 вертикальные формы представления в диапазоне Shift_JIS 0xEB41–0xED96, на 84 строки JIS ниже их канонических форм, и 260 специальных символов в диапазоне Shift_JIS 0x8540–0x886D. [16] Этот вариант был представлен в KanjiTalk версии 7. [17]

Однако некоторые гарнитуры Mac OS использовали другие варианты. Sai Mincho и Chu Gothic используют вариант MacJapanese « PostScript », который включает дополнительные вертикальные формы представления и другой набор расширенных специальных символов, основанных на специальных символах NEC , некоторые из которых были доступны только в версиях шрифтов для принтеров. [16] Более старые версии Maru Gothic и Hon Mincho из System 7.1 кодировали вертикальные формы представления на 10 (а не 84) строк JIS ниже своих канонических форм и не включали расширения специальных символов, это было впоследствии изменено. [16] [18] Типичный вариант, используемый с версией KanjiTalk 6, размещал вертикальные формы представления на 10 строк ниже, а также использовал макет расширения NEC для строки 13. [19]

Shift_JISx0213 и Shift_JIS-2004

Shift_JIS-2004
Псевдоним(ы)Shift_JISx0213
Язык(и)Японский , Айну , Английский , Русский
СтандартJIS X 0213
РасширяетShift_JIS (1997),
JIS X 0201 (8-бит)
Преобразует/КодируетJIS X 0213
ПредшествовалShift_JIS (1997)

Новый стандарт JIS X 0213 определяет расширенный вариант Shift_JIS, называемый Shift_JISx0213 (в предыдущей версии стандарта) или Shift_JIS-2004 . Это надмножество стандартного Shift JIS. [20]

Для представления выделенных строк на обеих плоскостях JIS X 0213 Shift_JIS-2004 использует следующий метод сопоставления кодовых точек. [21]

с 1 = { к + 257 2 если  м = 1  и  1 к 62 к + 385 2 если  м = 1  и  63 к 94 к + 479 2 к 8 × 3 если  м = 2  и  к = 1 , 3 , 4 , 5 , 8 , 12 , 13 , 14 , 15 к + 411 2 если  м = 2  и  78 к 94 {\displaystyle s_{1}={\begin{cases}\left\lfloor {\frac {k+257}{2}}\right\rfloor &{\mbox{if }}m=1{\mbox{ and }}1\leq k\leq 62\\\left\lfloor {\frac {k+385}{2}}\right\rfloor &{\mbox{if }}m=1{\mbox{ and }}63\leq k\leq 94\\\left\lfloor {\frac {k+479}{2}}\right\rfloor -\left\lfloor {\frac {k}{8}}\right\rfloor \times 3&{\mbox{if }}m=2{\mbox{ and }}k=1,3,4,5,8,12,13,14,15\\\left\lfloor {\frac {k+411}{2}}\right\rfloor &{\mbox{if }}m=2{\mbox{ and }}78\leq k\leq 94\end{cases}}}
s 2 = { t + 63 if  k  is odd and  1 t 63 t + 64 if  k  is odd and  64 t 94 t + 158 if  k  is even  {\displaystyle s_{2}={\begin{cases}t+63&{\mbox{if }}k{\mbox{ is odd and }}1\leq t\leq 63\\t+64&{\mbox{if }}k{\mbox{ is odd and }}64\leq t\leq 94\\t+158&{\mbox{if }}k{\mbox{ is even }}\end{cases}}}

В приведенном выше примере — двухбайтовая последовательность Shift_JIS-2004, — номер плоскости (, men , поверхность) (1 или 2), — номер ряда (, ku , палата) (1-94) и — номер ячейки (, ten , точка) (1-94). Числа ku и ten эквивалентны и соответственно, где — двухбайтовая последовательность JIS, ссылающаяся на заданную плоскость. s 1 s 2 {\displaystyle s_{1}s_{2}} m {\displaystyle m} k {\displaystyle k} t {\displaystyle t} j 1 32 {\displaystyle j_{1}-32} j 2 32 {\displaystyle j_{2}-32} j 1 j 2 {\displaystyle j_{1}j_{2}}

Тот же набор символов может быть представлен EUC-JIS-2004 , аналогом на основе EUC-JP.

Некоторые из дополнений конфликтуют с популярными расширениями Shift JIS, включая кодовую страницу Windows 932, которая используется в веб-стандартах (см. выше). Например, сравните строку 89 плоскости 1 в JIS X 0213 (начинается с 硃, 硎, 硏...) [22] со строкой 89 в варианте JIS X 0208, определенном в веб-стандартах (начинается с 纊, 褜, 鍈...). [23] Кроме того, некоторые символы сопоставляются с символами Unicode за пределами BMP.

Другие варианты

Пространство с ведущими байтами 0xF5 по 0xF9 (за пределами области, используемой для JIS X 0208) используется японскими операторами мобильной связи для пиктограмм , используемых в электронной почте . [24] KDDI идет дальше и определяет еще сотни в пространстве с ведущими байтами 0xF3 и 0xF4. [25]

Помимо этого, было сделано множество мелких изменений Shift JIS, в которых отдельные символы были изменены. Большинство этих расширений и вариантов не имеют регистрации IANA , поэтому существует много возможностей для путаницы, если расширения используются.

Вариант — это тот, который необходимо использовать, если вы хотите закодировать Shift JIS в строках исходного кода C и подобных языках программирования. Этот вариант удваивает байт 0x5C , если он появляется как второй байт двухбайтового символа, но не если он появляется как один символ "¥" (ASCII: "\"), потому что 0x5C является началом управляющей последовательности . Лучший способ справиться с этим — специальный редактор, который кодирует Shift JIS таким образом.

Сдвиг байтовой карты JIS

Как определено в JIS X 0208:1997

В приведенной ниже таблице дано подробное значение каждого байта в потоке, закодированном в стандарте Shift JIS (соответствующем JIS X 0208:1997 ).

Первый байт
0123456789АБСДЭФ
0
1
2!"#$%&'()*+,-./
30123456789:;<=>?
4@АБСДЭФГЧАСяДж.КЛМНО
5ПВРСТУВВтХИЗ[¥]^_
6`абсгефгчасяджклмно
7пдгсттывжхуз{|}
8
9
А
Бソ
С
Д
Э
Ф
Второй байт
0123456789АБСДЭФ
0
1
2
3
4
5
6
7
8
9
А
Б
С
Д
Э
Ф
 
Непечатаемый символ ASCII
Неизмененный символ ASCII
Модифицированный символ ASCII
Однобайтовая полуширинная катакана
Первый байт двухбайтового символа JIS X 0208
Не используется в качестве первого байта символа JIS X 0208.
Второй байт двухбайтового символа JIS X 0208, первая половина последовательности JIS которого была нечетной
Второй байт двухбайтового символа JIS X 0208, первая половина последовательности JIS которого была четной
Не используется как второй байт символа JIS X 0208

С расширениями поставщика или JIS X 0213

Некоторые байты, которые не используются для однобайтовых кодов или начальных байтов в JIS X 0208:1997, используются определенными расширениями, что приводит к структуре, подробно описанной в таблице ниже.

Первый байт
0123456789АБСДЭФ
0
1
2!"#$%&'()*+,-./
30123456789:;<=>?
4@АБСДЭФГЧАСяДж.КЛМНО
5ПВРСТУВВтХИЗ[¥]^_
6`абсгефгчасяджклмно
7пдгсттывжхуз{|}
8
9
А
Бソ
С
Д
Э
Ф
Второй байт
0123456789АБСДЭФ
0
1
2
3
4
5
6
7
8
9
А
Б
С
Д
Э
Ф
 
Непечатаемый символ ASCII
Неизмененный символ ASCII
Модифицированный символ ASCII
Однобайтовая полуширинная катакана
Первый байт двухбайтового символа, используемый JIS X 0208 (и расширениями, такими как JIS X 0213 plane 1)
Первый байт двухбайтового символа, не выделенный в JIS X 0208, но используемый плоскостью 1 JIS X 0213 или расширениями поставщика
Первый байт двухбайтового символа за пределами JIS X 0208, используемый для JIS X 0213 plane 2 или для несвязанных расширений
Не используется в качестве первого байта, используется некоторыми однобайтовыми расширениями
Второй байт двухбайтового символа, первая половина последовательности JIS которого была нечетной
Второй байт двухбайтового символа, первая половина последовательности JIS которого была четной
Не используется как второй байт двухбайтового символа.


Смотрите также

Сноски

  1. ^ Не в строгом смысле этого слова, поскольку байты ASCII могут отображаться как байты конца.
  2. ^ ASCII Corporation не следует путать с кодировкой ASCII, используемой в других местах этой статьи.
  3. ^ В JIS X 0208 j 1 и j 2 находятся в диапазоне от 33 (0x21) до 126 (0x7e) включительно (т.е. 7-битные значения символов, исключая управляющие символы (0–31 (0x1f) и 127 (0x7f)) и пробел).

Ссылки

  1. ^ abc "Наборы символов". IANA.
  2. ^ ab "convutf8.c". OpenSolaris . Строка 305. 2008-11-12.
  3. ^ ab "Дополнительные японские модули iconv". Что нового в операционной среде Solaris 9 9/04 . Корпорация Oracle .
  4. ^ "Исторические тенденции использования кодировок символов для веб-сайтов, май 2024 г.". w3techs.com . Получено 22.05.2024 .
  5. ^ "Распределение кодировок символов среди веб-сайтов, использующих .jp". w3techs.com . Получено 2024-10-06 .
  6. ^ "Распределение кодировок символов среди веб-сайтов, использующих японский язык". w3techs.com . Получено 2024-10-06 .
  7. ^ ab "Свойство Encoding.WindowsCodePage – .NET Framework (текущая версия)". MSDN . Microsoft.
  8. ^ «Идентификаторы кодовых страниц». Центр разработки Windows . Microsoft. 7 января 2021 г.
  9. ^ "IBM-943 и IBM-932". Центр знаний IBM . IBM.
  10. ^ "CP932.TXT". Консорциум Unicode.
  11. ^ "3.1.1 Подробности проблем". Проблемы и решения для символов Unicode и User/Vendor Defined . The Open Group Japan. Архивировано из оригинала 1999-02-03.
  12. ^ Каплан, Майкл С. (17.09.2005). «Когда обратная косая черта не является обратной косой чертой?».
  13. ^ Каплан, Майкл С. (2007-05-26). "PUA за пределами Unicode". Разбираемся во всем этом .
  14. ^ "5. Индексы (§ Индекс jis0208)". Стандарт кодирования . WHATWG.
  15. ^ "4.2. Имена и метки". Стандарт кодировки . WHATWG.
  16. ^ abc "JAPANESE.TXT: Преобразование (внешняя версия) японской кодировки Mac OS в Unicode 2.1 и более поздние версии". Apple Computer, Inc.; Unicode Consortium.
  17. ^ Лунде, Кен (2019-03-21). "Краткая история японских лигатур названий эпох". Блог CJK Type . Adobe Inc.
  18. ^ "Варианты кодировки для MacJapanese". Документация для разработчиков Apple . Apple.
  19. ^ Ланде, Кен (2008). "Приложение E: Стандарты набора символов поставщика" (PDF) . Обработка информации CJKV . O'Reilly Media . ISBN 9780596514471.
  20. ^ "Таблицы сопоставления кодов JIS X 0213". x0213.org.
  21. ^ «JIS X 0213の代表的な符号化方式 § Shift_JIS-2004» (на японском языке).Шестнадцатеричные числа в источнике были преобразованы в десятичные для отображения.
  22. ^ Японский комитет промышленных стандартов (2004-04-13). Японский набор графических символов для обмена информацией, Plane 1 (PDF) . ITSCJ/ IPSJ . ISO-IR -233.
  23. ^ "Визуализация индекса jis0208". Стандарт кодирования . WHATWG.
  24. ^ "Оригинальный эмодзи от DoCoMo". FileFormat.info.
  25. ^ "Оригинальный эмодзи от KDDI". FileFormat.info.
  • Таблица кандзи Shift-JIS – таблица не-ASCII части кодировки
  • "Windows Codepage 932". Microsoft . 1 мая 2005 г. Архивировано из оригинала 2008-03-07. – Определение Microsoft
  • Формы Shift-JIS в ICU ( международные компоненты для Unicode )
    • ibm-942 (sjis78)
    • ibm-943 (содержит отображение \u00A5 ↔ \x5C)
    • Shift JIS (содержит отображение \u005C ↔ \x5C)
Retrieved from "https://en.wikipedia.org/w/index.php?title=Shift_JIS&oldid=1249795660"