La página de códigos IBM 949 (IBM-949) es una codificación de caracteres que IBM ha utilizado para representar texto en coreano en computadoras. Es una codificación de ancho variable que representa los caracteres del código Wansung definido por el estándar surcoreano KS X 1001 en un formato compatible con EUC-KR , pero agrega extensiones IBM para hanja adicional, sílabas Hangul precompuestas adicionales y caracteres definidos por el usuario .
Los bytes 0x00 a 0x7F se utilizan para caracteres KS X 1003 ( ISO 646 : KR) de un solo byte, un conjunto similar al ASCII pero con un signo won en lugar de una barra invertida. Los bytes 0x80 a 0x84 se utilizan para caracteres de extensión de un solo byte de IBM. Los bytes iniciales 0x8F a 0xA0 se utilizan para caracteres de extensión de doble byte de IBM. Los bytes iniciales 0xA1 a 0xFE se utilizan para código Wansung ( caracteres KS X 1001 en formato EUC-KR, doble byte), pero con algo de espacio sin usar abierto para uso definido por el usuario.
Aunque a veces se los denomina "cp949", IBM-949 es diferente de la página de códigos 949 de Windows (IBM-1363), que es el código Hangul unificado de Microsoft, una extensión diferente de EUC-KR. Tampoco debe confundirse con la implementación de IBM del EUC-KR simple ( IBM-970 ). La página de códigos 949 en OS/2 es la página de códigos de IBM; sin embargo, existe un parche de terceros para cambiar esto. [1]
Tanto IBM-949 como el código Hangul unificado (Windows-949) se conocen como "página de códigos 949" (o "cp949"), aunque solo comparten el subconjunto EUC-KR. Ninguno tiene una etiqueta registrada por la IANA para identificarlo. Aunque UHC está incluido en el estándar de codificación WHATWG , [2] con etiquetas que incluyen "windows-949", [3] IBM-949 no lo está. Por lo tanto, IBM-949 no está permitido en HTML5 .
Aunque el significado de la etiqueta "ibm-949" (y, a la inversa, "windows-949" y "ms949") es inequívoco cuando se admiten estas etiquetas, la interpretación de las etiquetas de codificación "949" y "cp949" varía en consecuencia entre implementaciones. Por ejemplo, International Components for Unicode utiliza "cp949", "949", "ibm-949" y "x-IBM949" para referirse a IBM-949, [4] y, además, las etiquetas "cp949c", "ibm-949c" y "x-IBM949C" para referirse a una variante que utiliza asignaciones ASCII sin modificar para 0x20–7E (lo que da como resultado asignaciones duplicadas para la barra invertida), [5] mientras que (de las etiquetas que incorporan el número de página de códigos 949) solo "ms949" y "windows-949" se asignan a UHC. [6] Esto contrasta con Python , que reconoce tanto "cp949" como "949" (además de los más explícitos "ms949" y "uhc", pero no "windows-949") como etiquetas para UHC, y no incluye un códec IBM-949. [7] La página de códigos 949 utilizada por las versiones en coreano de OS/2 es la página de códigos de IBM; para agregar soporte para todo el conjunto Unicode de sílabas coreanas, existe un parche de terceros para reemplazarlo con la página de códigos de Microsoft. [1]
IBM-949 es una codificación de ancho variable definida como la combinación de dos páginas de códigos de ancho fijo, la página de códigos 1088 de un solo byte y la página de códigos 951 de doble byte . [8] [9] [10]
Una versión de la página de códigos 951 (un código DBCS-PC, es decir, de doble byte, no EUC, no EBCDIC ), el componente de doble byte para IBM-949, se define en la revisión de septiembre de 1992 de la Especificación corporativa de IBM CH 3-3220-125, junto con la página de códigos 834 (un código DBCS-Host, es decir, de doble byte, EBCDIC), que es el componente de doble byte de la página de códigos 933. [ 11] Esta versión de la página de códigos 949/951 consideró que todo el rango de bytes iniciales 0x8F–A0 era una región definida por el usuario, e incluyó solo asignaciones Wansung estándar y áreas definidas por el usuario, por lo que no incluyó algunos caracteres que sí incluía la página de códigos 933/834. [11] Algunas versiones posteriores, como la implementada por International Components for Unicode (ICU), reducen la región definida por el usuario para incluir estos caracteres como extensiones. [12]
La revisión anterior de octubre de 1989 de CH 3-3220-125 había definido en cambio la página de códigos 926 como su código DBCS-PC, que codificaba los mismos caracteres que IBM-834 en un diseño diferente tanto de IBM-951 como de IBM-834, que tenían un rango de bytes iniciales diferente y no eran una extensión EUC-KR. [11] IBM-926 se combinó con la página de códigos 891 o la página de códigos 1040 (respectivamente, código Hangul de N bytes de 8 bits y una extensión del mismo; compare cómo Shift JIS extiende JIS X 0201 de 8 bits ) para formar IBM-934 o IBM-944 respectivamente. [13] [14]
Las páginas de códigos 944/926 han quedado obsoletas en favor de IBM-949. La revisión de 1992 designa la página de códigos 926 como "restringida" ("limitada al entorno particular para el que [está] registrada") y no proporciona su diagrama ni sus asignaciones con respecto a las otras páginas de códigos, [11] y el CCSID 944 se clasifica como "coexistencia y migración" [14] (en contraste con "interoperable" para el CCSID 949). [8] Los Componentes Internacionales para Unicode incluyen asignaciones Unicode para IBM-949 [4] [12] e IBM-933, pero su asignación a IBM-944 se eliminó en 2001. [15]
IBM-949 está diseñado para soportar un máximo de 1880 UDC (caracteres definidos por el usuario), [8] incluyendo las filas definidas por el usuario (bytes iniciales 0xC9 y 0xFE) del plano Wansung, y rangos fuera del plano Wansung. En esta versión, los bytes iniciales 0x8F–A0 contienen un máximo de 1692 UDC, y los bytes iniciales 0xC9 y 0xFE contienen un máximo de 94 cada uno (es decir, con bytes finales 0xA1–FE). [11] Sin embargo, cuando se implementan las extensiones para soportar todo el repertorio de doble byte de IBM-933 , utilizan los bytes iniciales 0x9A–A0, lo que resulta en un número máximo menor de caracteres para la definición del usuario. [4] [12]
Cuando se asignan a Unicode, 0xC9A1–C9FE (entre los rangos de sílabas y hanja) se asignan a los puntos de código de área de uso privado de Unicode U+E000–E05D, mientras que 0xFEA1–FEFE (entre el final del rango hanja y el final del plano) se asignan a U+E05E–E0BB. Fuera del plano Wansung, 0x8FA0–9AA5 (donde el segundo byte está en el rango 0xA1–FE) se asignan a los puntos de código de área de uso privado U+E0BC–E4CA. [4] El último de estos rangos corta en el comienzo de la fila 0x9A (que se muestra a continuación).
En conjunto, estos rangos de uso privado cubren los puntos de código U+E000–E4CA, lo que permite mapear 1227 UDC desde IBM-949 a Unicode. [12] IBM utiliza el rango de área de uso privado independiente U+F843–F86E para mapear algunos caracteres dentro del rango hanja extendido. [12] Esto sigue las recomendaciones tempranas del Consorcio Unicode de que los caracteres corporativos se asignen desde U+F8FF hacia abajo y los caracteres definidos por el usuario se asignen desde U+E000 hacia arriba, [18] y es parte de un esquema de área de uso privado corporativo más grande que está definido internamente por IBM y utiliza el rango U+F83D–F8FF. [19] [20]
Según la especificación de 1992, todo este rango está definido por el usuario. [11] Sin embargo, tal como se implementó en el códec aportado a ICU por IBM, 0x9AA1 a 0x9AA5 son el final del rango definido por el usuario. El resto de este rango incluye algunos caracteres no hangul incluidos en la página de códigos 933 pero no en el código Wansung. 0x9AA6 a 0x9AAB contienen símbolos técnicos o matemáticos diversos. El resto contiene hanja adicional a los incluidos en KS X 1001 , aunque algunos están asignados por IBM al Área de uso privado. [12]
Según la especificación de 1992, todo este rango está definido por el usuario. [11] Tal como se implementó en el códec aportado a ICU por IBM, 0x9EA1 a 0x9EAC contienen el resto del hanja extendido. El resto del rango contiene algunas sílabas Hangul adicionales que no están disponibles en forma precompuesta en EUC-KR puro. A diferencia del Código Hangul Unificado, esto es insuficiente para admitir todas las sílabas Johab no parciales ausentes en el código Wansung. [12]
Entre estos, los más importantes son 뢔 (0x9EFC), 쌰 (0x9FE6), 쎼 (0x9FED), 쓔 (0x9FF3) y 쬬 (0xA0C1), que corresponden a los comienzos de los caracteres Wansung estándar 뢨, 썅, 쏀, 쓩 y 쭁 respectivamente, cuando se ingresan parcialmente en un editor de métodos de entrada .
Esto coincide con el estándar KS X 1001 y el Código Hangul unificado, más comúnmente conocidos juntos como Página de códigos de Windows 949.
IBM ha designado 195 posiciones desde U+F83D hasta U+F8FF para su uso como zona corporativa de IBM y tiene la intención de utilizarlas de manera consistente dentro de IBM siempre que sea necesario mantener la integridad de ida y vuelta de los caracteres de IBM.