La página de códigos 932 de Microsoft Windows (abreviada MS932 , [2] [3] Windows-932 [3] o ambiguamente CP932 [4] ), también llamada Windows-31J entre otros nombres (ver § Terminología a continuación), es la página de códigos de Microsoft Windows para el idioma japonés , que es una variante extendida de la codificación de caracteres japoneses Shift JIS . Contiene códigos ASCII estándar de 7 bits , y los caracteres japoneses se indican mediante el bit alto del primer byte establecido en 1. Algunos puntos de código en esta página requieren un segundo byte, por lo que los caracteres usan 8 o 16 bits para la codificación.
IBM ofrece los mismos códigos de doble byte extendidos en su página de códigos 943 ( IBM-943 o CP943 ), [5] que es una combinación de la página de códigos 897 de un solo byte y la página de códigos 941 de doble byte . [6]
Windows-31J es la codificación japonesa no UTF-8 /Unicode más utilizada en la web. Sin embargo, muchas personas y paquetes de software, incluidas las bibliotecas de Microsoft, [7] declaran la codificación Shift JIS para los datos de Windows-31J, aunque incluye algunos caracteres adicionales y algunos de los caracteres existentes se asignan a Unicode de forma diferente. Esto ha llevado al estándar HTML WHATWG a tratar las etiquetas de codificación shift_jis
de windows-31j
forma intercambiable y a utilizar la variante de Windows para su codificador y decodificador "Shift_JIS". [1]
La variante Shift JIS de Microsoft se conoce simplemente como "Página de códigos 932" en Microsoft Windows, sin embargo esto es ambiguo ya que la página de códigos 932 de IBM , si bien también es una variante Shift JIS, carece de las extensiones de proveedor de doble byte de NEC y seleccionadas por NEC que están presentes en la variante de Microsoft (aunque ambas incluyen las extensiones de IBM) y conserva el ordenamiento de 1978 de JIS X 0208. [5]
La página de códigos 943 de IBM (o "IBM-943") incluye los mismos códigos de doble byte que la página de códigos 932 de Windows. [5] La versión de Microsoft se corresponde estrechamente con la codificación denominada ibm-943_P15A-2003 (con alias que incluyen CP943C y Windows-932 ) [3] en International Components for Unicode (ICU). También existe una segunda codificación ICU denominada ibm-943_P130-1999 [8] , que utiliza diferentes asignaciones de un solo byte que coinciden más estrechamente con las definiciones de la página de códigos de IBM. (Consulte § Diferencias de caracteres de un solo byte a continuación para obtener más detalles).
La página de códigos 932 de Windows está registrada en la IANA como Windows-31J . [9] La etiqueta "Windows-31J" pertenece a la IANA y no es reconocida por Microsoft, que históricamente ha utilizado "shift_jis" en su lugar. [7] El estándar de codificación W3C / WHATWG utilizado por HTML5 trata la etiqueta " shift_jis " de manera intercambiable con "windows-31j" con la intención de que sea "compatible con el contenido implementado" [10] y coincide con la página de códigos 932 de Windows [1] (incluidas las "extensiones anteriormente propietarias de IBM y NEC"). [11]
La página de códigos 932 de Windows también se denomina MS_Kanji , [3] [12] aunque IANA trata a MS_Kanji como un alias para Shift JIS estándar. [9] Python , por ejemplo, utiliza la etiqueta MS-Kanji
(o cp932
) para Windows-932 y la etiqueta Shift_JIS
(o sjis
) para Shift JIS definido por JIS X 0208, sin reconocer la Windows-31J
etiqueta. [12]
En las ediciones japonesas de Windows, esta página de códigos se denomina "ANSI" , ya que es la codificación de 8 bits predeterminada del sistema operativo, aunque ANSI no estuvo involucrado en su definición.
Windows-31J a menudo se confunde con el Shift JIS estándar (como se define en JIS X 0208 :1997 Apéndice 1): si bien son similares, la distinción es significativa para los programadores de computadoras que desean evitar mojibake .
Además de los caracteres estándar JIS X 0201 :1997 y JIS X 0208 :1997, Windows-31J incluye varias extensiones JIS X 0208, a saber, " Caracteres especiales NEC (fila 13), selección NEC de extensiones IBM (filas 89 a 92) y extensiones IBM (filas 115 a 119)", [9] además de reservar algo de espacio de codificación para la definición del usuario final . [13] Esto también difiere de IBM-932 , que no incluye las extensiones NEC ni la selección NEC. [5]
Las extensiones IBM fueron diseñadas para codificar caracteres del repertorio DBCS-Host japonés de IBM que inicialmente estaban ausentes en JIS X 0208; el signo "porque" ∵ y el signo "no"¬ se agregaron más tarde a JIS X 0208 en 1983, y Microsoft los incluye en ubicaciones de extensión además de sus ubicaciones de 1983. [14] Las extensiones NEC también codifican la totalidad del repertorio IBM, pero en una extensión separada dentro de la cuadrícula JIS X 0208 de 94 × 94 (en las filas 89 a 92, además de los caracteres ya incluidos en la fila 13 de NEC ), en lugar de usar códigos Shift JIS más allá del rango JIS X 0208; la página de códigos 932 de Windows incluye estos 388 caracteres en ambas ubicaciones. [14] Como resultado, los signos porque y no se codifican tres veces.
Algunas de estas representaciones se utilizaron posteriormente para diferentes caracteres en JIS X 0213 y Shift JIS-2004 . Por ejemplo, compare la fila 89 en JIS X 0213 (que comienza con 硃, 硎, 硏…) [15] con la fila 89 que utiliza JIS X 0208 con extensiones IBM/NEC (que comienza con 纊, 褜, 鍈…). [16] En consecuencia, Shift JIS-2004 no es compatible con Windows-31J.
Además de lo anterior, Microsoft utiliza una asignación Unicode diferente (pero visualmente similar) para varios caracteres de puntuación de doble byte en comparación con el estándar Shift JIS, como el guión ondulado que se asigna a U+FF5E en lugar de U+301C, [17] al que le sigue ibm-943_P15A-2003 [18] pero no ibm-943_P130-1999, [19] y utiliza una asignación diferente para la barra invertida de doble byte. [17]
Windows-932 incluye asignaciones ASCII estándar de 7 bits para secuencias de un solo byte con el bit alto establecido en 0. Por lo tanto, los códigos 0x5C y 0x7E se asignan a Unicode como U+005C REVERSE SOLIDUS ( \
, la barra invertida ) y U+007E TILDE ( ~
) respectivamente, [20] [21] [17] como lo son en ASCII ( ISO-646 -US). Esto también lo hace el estándar de codificación W3C/WHATWG. [22] Por el contrario, 0x5C se asigna a U+00A5 YEN SIGN ( ¥
) en ISO-646-JP y, en consecuencia, JIS X 0201 , del cual el estándar Shift JIS es una extensión. En consecuencia, Windows-31J evita la codificación duplicada de la barra invertida al asignar el byte doble 0x815F a U+FF3C FULLWIDTH REVERSE SOLIDUS, mientras que el Shift JIS estándar lo asigna a U+005C. [17]
Sin embargo, 0x5C en Windows-932 se considera un signo de yen en ciertos contextos. [23] Por esta razón, en muchas fuentes japonesas, U+005C se muestra como un símbolo de yen, que normalmente se representaría como U+00A5, en lugar de como una barra invertida según la representación sugerida por Unicode. U+00A5 es un ajuste óptimo unidireccional asignado a 0x5C en Windows-932. Sin embargo, el código 0x5C en Windows-932 se comporta como una barra invertida en todos los aspectos (por ejemplo, en las rutas de archivo en los sistemas Windows) excepto en la forma en que se muestra en algunas fuentes, [23] y la documentación de Microsoft para Windows-932 muestra 0x5C como una barra invertida. [21] Esta asignación [20] corresponde a la codificación denominada "ibm-943_P15A-2003" en Componentes internacionales para Unicode (ICU), [3] excepto por un reordenamiento menor de algunos caracteres de control C0 .
IBM-943 , al igual que IBM-932 , [5] es un superconjunto de la página de códigos 897 de un solo byte , [6] que asigna 0x5C al símbolo del yen ( ¥
) y 0x7E a la línea superior ( ‾
), [24] a esto le sigue la codificación denominada "ibm-943_P130-1999" en ICU. [8] La página de códigos 897 (y, por lo tanto, también IBM-943 e IBM-932) también agrega caracteres de dibujo de caja de un solo byte que reemplazan ciertos caracteres de control C0 , [24] sin embargo, estos aún pueden tratarse como caracteres de control según el contexto, [25] y se asignan a caracteres de control en ICU. [8]
Si byte es un byte ASCII o 0x80, devuelve un punto de código cuyo valor es byte.