MIME/IANA | Shift_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 выглядит следующим образом:
Конкурирующий 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.
Существует множество различных версий 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 ( 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]
Версия 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 |
---|---|
Язык(и) | Японский , Айну , Английский , Русский |
Стандарт | 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]
В приведенном выше примере — двухбайтовая последовательность Shift_JIS-2004, — номер плоскости (面, men , поверхность) (1 или 2), — номер ряда (区, ku , палата) (1-94) и — номер ячейки (点, ten , точка) (1-94). Числа ku и ten эквивалентны и соответственно, где — двухбайтовая последовательность JIS, ссылающаяся на заданную плоскость.
Тот же набор символов может быть представлен 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 таким образом.
В приведенной ниже таблице дано подробное значение каждого байта в потоке, закодированном в стандарте Shift JIS (соответствующем JIS X 0208:1997 ).
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Некоторые байты, которые не используются для однобайтовых кодов или начальных байтов в JIS X 0208:1997, используются определенными расширениями, что приводит к структуре, подробно описанной в таблице ниже.
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|