Кодовая страница Microsoft Windows 932 (сокращенно MS932 , [2] [3] Windows-932 [3] или неоднозначно CP932 [4] ), также называемая Windows-31J среди других названий (см. § Терминология ниже), является кодовой страницей Microsoft Windows для японского языка , которая является расширенным вариантом японской кодировки символов Shift JIS . Она содержит стандартные 7-битные коды ASCII , а японские символы обозначаются тем, что старший бит первого байта устанавливается в 1. Некоторые кодовые точки на этой странице требуют второго байта, поэтому символы используют либо 8, либо 16 бит для кодирования.
IBM предлагает те же расширенные двухбайтовые коды в своей кодовой странице 943 ( IBM-943 или CP943 ), [5] которая представляет собой комбинацию однобайтовой кодовой страницы 897 и двухбайтовой кодовой страницы 941. [ 6]
Windows-31J является наиболее используемой не- UTF-8 /Unicode японской кодировкой в Интернете. Однако многие люди и программные пакеты, включая библиотеки Microsoft, [7] объявляют кодировку Shift JIS для данных Windows-31J, хотя она включает некоторые дополнительные символы, а некоторые из существующих символов отображаются в Unicode по-разному. Это привело к тому, что стандарт WHATWG HTML стал рассматривать метки кодировки shift_jis
и windows-31j
взаимозаменяемо и использовать вариант Windows для своего кодировщика и декодера "Shift_JIS". [1]
Вариант Shift JIS от Microsoft известен просто как «кодовая страница 932» в Microsoft Windows, однако это двусмысленно, поскольку кодовая страница 932 от IBM , также являющаяся вариантом Shift JIS, не имеет двухбайтовых расширений поставщиков NEC и выбранных NEC, которые присутствуют в варианте Microsoft (хотя оба включают расширения IBM) и сохраняет порядок JIS X 0208 1978 года. [5]
Кодовая страница IBM 943 (или «IBM-943») включает те же двухбайтовые коды, что и кодовая страница Windows 932. [5] Версия Microsoft близко соответствует кодировке, называемой ibm-943_P15A-2003 (с псевдонимами, включая CP943C и Windows-932 ) [3] в International Components for Unicode (ICU). Существует также вторая кодировка ICU, называемая ibm-943_P130-1999 , [8] которая использует другие однобайтовые отображения, которые более точно соответствуют определениям кодовой страницы IBM. (Подробности см. в § Различия однобайтовых символов ниже.)
Кодовая страница Windows 932 зарегистрирована в IANA как Windows-31J . [9] Метка «Windows-31J» принадлежит IANA и не признаётся Microsoft, которая исторически использовала вместо неё «shift_jis». [7] Стандарт кодирования W3C / WHATWG, используемый HTML5, рассматривает метку « shift_jis » как взаимозаменяемую с «windows-31j» с намерением «совместимости с развёрнутым содержимым» [10] и соответствует кодовой странице Windows 932 [1] (включая «ранее фирменные расширения от IBM и NEC»). [11]
Кодовая страница Windows 932 также называется MS_Kanji , [3] [12] хотя IANA рассматривает MS_Kanji как псевдоним для стандартного Shift JIS. [9] Python , например, использует метку MS-Kanji
(или cp932
) для Windows-932 и метку Shift_JIS
(или sjis
) для Shift JIS, определенного в JIS X 0208, не распознавая Windows-31J
метку. [12]
В японских версиях Windows эта кодовая страница называется «ANSI» , поскольку это 8-битная кодировка операционной системы по умолчанию, хотя ANSI не участвовал в ее определении.
Windows-31J часто ошибочно принимают за стандартный Shift JIS (как определено в JIS X 0208 :1997, Приложение 1): хотя они и похожи, различие имеет важное значение для программистов, желающих избежать mojibake .
В дополнение к стандартным символам JIS X 0201 :1997 и JIS X 0208 :1997, Windows-31J включает несколько расширений JIS X 0208, а именно « специальные символы NEC (строка 13), выбор NEC расширений IBM (строки 89–92) и расширения IBM (строки 115–119)», [9] в дополнение к выделению некоторого пространства кодировки для определения конечного пользователя . [13] Это также отличается от IBM-932 , который не включает расширения NEC или выбор NEC. [5]
Расширения IBM были разработаны для кодирования символов из репертуара IBM Japanese DBCS-Host , которые изначально отсутствовали в JIS X 0208; знак «потому что» ∵ и знак «н廬 были позже добавлены в сам JIS X 0208 в 1983 году, и Microsoft включает их в местоположения расширения, а также в их местоположения в 1983 году. [14] Расширения NEC также кодируют весь репертуар IBM, но в отдельном расширении в сетке 94×94 JIS X 0208 (в строках 89–92, помимо символов, уже включенных в строку 13 NEC ), вместо использования кодов Shift JIS за пределами диапазона JIS X 0208; кодовая страница Windows 932 включает эти 388 символов в обоих местоположениях. [14] В результате знаки «потому что» и «не» кодируются три раза.
Некоторые из этих представлений впоследствии использовались для различных символов JIS X 0213 и Shift JIS-2004 . Например, сравните строку 89 в JIS X 0213 (начинается с 硃, 硎, 硏…) [15] со строкой 89, используемой JIS X 0208 с расширениями IBM/NEC (начинается с 纊, 褜, 鍈…). [16] Следовательно, Shift JIS-2004 несовместим с Windows-31J.
В дополнение к вышесказанному, Microsoft использует различное (но визуально похожее) сопоставление Unicode для нескольких двухбайтовых знаков пунктуации по сравнению со стандартным Shift JIS, например, волнистое тире , сопоставленное с U+FF5E , а не с U+301C, [17] за которым следует ibm-943_P15A-2003 [18], но не ibm-943_P130-1999, [19] и использование другого сопоставления для двухбайтовой обратной косой черты. [17]
Windows-932 включает стандартные 7-битные отображения ASCII для однобайтовых последовательностей со старшим битом, установленным в 0. Таким образом, коды 0x5C и 0x7E отображаются в Unicode как U+005C REVERSE SOLIDUS ( \
, обратная косая черта ) и U+007E TILDE ( ~
) соответственно, [20] [21] [17] как они отображаются в ASCII ( ISO-646 -US). Это также делается стандартом кодирования W3C/WHATWG. [22] Напротив, 0x5C отображается как U+00A5 YEN SIGN ( ¥
) в ISO-646-JP и, следовательно, JIS X 0201 , расширением которого является стандарт Shift JIS . Соответственно, Windows-31J избегает дублирования кодирования обратной косой черты, отображая двойной байт 0x815F в U+FF3C FULLWIDTH REVERSE SOLIDUS, тогда как стандартный Shift JIS отображает его в U+005C. [17]
Однако 0x5C в Windows-932 тем не менее считается знаком йены в определенных контекстах. [23] По этой причине во многих японских шрифтах U+005C отображается как символ йены, который обычно представляется как U+00A5, а не как обратная косая черта в соответствии с предлагаемым отображением Unicode. U+00A5 — это одностороннее наилучшее соответствие 0x5C в Windows-932. Однако код 0x5C в Windows-932 ведет себя как обратная косая черта (обратная косая черта) во всех отношениях (например, в путях к файлам в системах Windows), за исключением того, как он отображается некоторыми шрифтами, [23] и документация Microsoft для Windows-932 отображает 0x5C как обратную косую черту. [21] Это отображение [20] соответствует кодировке под названием «ibm-943_P15A-2003» в международных компонентах Unicode (ICU), [3] за исключением незначительного изменения порядка нескольких управляющих символов C0 .
IBM-943 , как и IBM-932 , [5] является надмножеством однобайтовой кодовой страницы 897 , [6] которая сопоставляет 0x5C с символом йены ( ¥
), а 0x7E с верхней чертой ( ‾
), [24] за этим следует кодировка с именем "ibm-943_P130-1999" в ICU. [8] Кодовая страница 897 (и, следовательно, также IBM-943 и IBM-932) также добавляет однобайтовые символы рисования прямоугольников, заменяющие определенные управляющие символы C0 , [24] однако они все еще могут рассматриваться как управляющие символы в зависимости от контекста, [25] и сопоставляются с управляющими символами в ICU. [8]
Если байт является байтом ASCII или 0x80, вернуть кодовую точку, значение которой равно байту.