Кодовая страница 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 . Это привело к тому, что стандарт HTML WHATWG стал рассматривать метки кодировки shift_jis
как windows-31j
взаимозаменяемые и использовать вариант Windows для кодера и декодера «Shift_JIS». [1]
Вариант Microsoft Shift JIS известен просто как «Кодовая страница 932» в Microsoft Windows, однако это неоднозначно, поскольку кодовая страница IBM 932 , а также вариант 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] в Международных компонентах 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
) для JIS X 0208, определенного Shift JIS, не распознавая 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), выбор расширений IBM NEC (строки с 89 по 92), и расширения IBM (строки с 115 по 119)», [9] в дополнение к выделению некоторого пространства для кодирования для определения конечного пользователя . [13] Это также отличается от IBM-932 , который не включает расширения NEC или выбор NEC. [5]
Расширения IBM были разработаны для кодирования символов из японского репертуара IBM DBCS-Host , который изначально отсутствовал в JIS X 0208; Знак «потому что» ∵ и знак «н廬 были позже добавлены в сам JIS X 0208 в 1983 году, и Microsoft включает их в местоположения расширений, а также в их местоположения 1983 года. [14] Расширения NEC также кодируют весь репертуар IBM, но в отдельном расширении в сетке JIS X 0208 94×94 (в строках 89–92, помимо символов, уже включенных в строку 13 NEC ), вместо использования Сдвинуть коды 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» в International Components for Unicode (ICU), [3] за исключением незначительного изменения порядка нескольких управляющих символов C0 .
IBM-943, как и IBM-932 , [5] представляет собой надмножество однобайтовой кодовой страницы 897 , [6] которая сопоставляет 0x5C с символом иены ( ¥
) и 0x7E с подчеркиванием ( ‾
), [24] за этим следует по кодировке «ibm-943_P130-1999» в отделении интенсивной терапии. [8] Кодовая страница 897 (и, следовательно, также IBM-943 и IBM-932) также добавляет однобайтовые символы рисования прямоугольников, заменяющие определенные управляющие символы C0 , [24] однако они все равно могут рассматриваться как управляющие символы в зависимости от контекста. [25] и сопоставлены с управляющими символами в отделении интенсивной терапии. [8]
Если byte — это байт ASCII или 0x80, верните кодовую точку, значение которой — байт.