EBCDIC
Código de intercambio decimal codificado en binario extendido (EBCDIC;) es una codificación de caracteres de ocho bits que se utiliza principalmente en los sistemas operativos de computadoras centrales IBM y de rango medio de IBM. Desciende del código utilizado con las tarjetas perforadas y el correspondiente código decimal codificado en binario de seis bits utilizado con la mayoría de los periféricos informáticos de IBM de finales de la década de 1950 y principios de la de 1960. Es compatible con varias plataformas que no son de IBM, como Fujitsu-Siemens' BS2000/OSD, OS-IV, MSP y MSP-EX, la serie SDS Sigma, Unisys VS/9, Unisys MCP e ICL VME.
Historia
EBCDIC fue ideado en 1963 y 1964 por IBM y se anunció con el lanzamiento de la línea IBM System/360 de computadoras mainframe. Es una codificación de caracteres de ocho bits, desarrollada por separado del esquema de codificación ASCII de siete bits. Fue creado para extender el Código de Intercambio Decimal de Codificación Binaria (BCD) existente, o BCDIC, que en sí mismo fue diseñado como un medio eficiente para codificar los dos puntos de zona y número en tarjetas perforadas en seis bits. La codificación distinta de 's' y 'S' (utilizando la posición 2 en lugar de la 1) se mantuvo a partir de tarjetas perforadas en las que era deseable no tener perforaciones demasiado cercanas entre sí para garantizar la integridad de la tarjeta física.
Si bien IBM fue uno de los principales defensores del comité de estandarización ASCII, la empresa no tuvo tiempo de preparar los periféricos ASCII (como las máquinas perforadoras de tarjetas) para enviarlos con sus computadoras System/360, por lo que se decidió por EBCDIC. El System/360 tuvo un gran éxito, junto con clones como RCA Spectra 70, ICL System 4 y Fujitsu FACOM, al igual que EBCDIC.
Todos los sistemas operativos de mainframe y de rango medio de IBM utilizan EBCDIC como su codificación inherente (con tolerancia para ASCII, por ejemplo, ISPF en z/OS puede explorar y editar archivos codificados EBCDIC y ASCII). El software puede traducir hacia y desde codificaciones, y los mainframes modernos (como IBM Z) incluyen instrucciones de procesador, a nivel de hardware, para acelerar la traducción entre conjuntos de caracteres.
Existe un formato de transformación Unicode orientado a EBCDIC llamado UTF-EBCDIC propuesto por Unicode Consortium, diseñado para permitir una fácil actualización del software EBCDIC para manejar Unicode, pero no destinado a ser utilizado en entornos de intercambio abierto. Incluso en sistemas con amplio soporte EBCDIC, no ha sido popular. Por ejemplo, z/OS admite Unicode (prefiriendo específicamente UTF-16), pero z/OS solo tiene compatibilidad limitada con UTF-EBCDIC.
No todos los productos de IBM utilizan EBCDIC; IBM AIX, Linux en IBM Z y Linux en Power utilizan ASCII.
Compatibilidad con ASCII
Hubo numerosas dificultades para escribir software que funcionara tanto en ASCII como en EBCDIC.
- Las brechas entre letras hicieron código simple que funcionó en ASCII fallan en EBCDIC. Por ejemplo
for (c = 'A'; c <= 'Z'; ++c) putchar(c);
imprimiría el alfabeto de A a Z si se utiliza ASCII, pero imprimir 41 caracteres (incluyendo varios de los no asignados) en EBCDIC. - Ordenar EBCDIC puso letras minúsculas antes de letras mayúsculas y letras antes de números, exactamente lo contrario de ASCII.
- La mayoría de lenguajes de programación y formatos de archivo y protocolos de red diseñados para ASCII utilizaban marcas de puntuación disponibles (como los frenos curly {} y }) que no existía en EBCDIC, haciendo difícil la traducción a los sistemas EBCDIC. Se utilizaron soluciones de trabajo como trigrafías. Por el contrario, EBCDIC tenía algunos personajes como ¢ (US cent) que se utilizó en los sistemas IBM y no se pudo traducir a ASCII.
- La convención de nueva línea más común utilizada con EBCDIC es utilizar un código NEL (NEXT LINE) entre líneas. Los convertidores a otras codificaciones a menudo reemplazan a NEL por LF o CR/LF, incluso si hay un NEL en la codificación de destino. Esto hace que el LF y NEL se traduzcan al mismo carácter y no puedan distinguirse.
- Si se utilizaba ASCII de siete bits, había un bit alto "no utilizado" en bytes de 8 bits, y muchos pedazos de software almacenaban otra información allí. El software también empacaría los siete bits y descartaría el octavo, como empacar cinco caracteres ASCII de siete bits en una palabra de 36 bits. En los bytes PDP-11 con el conjunto de bits elevados fueron tratados como números negativos, comportamiento que fue copiado a C, causando problemas inesperados si el bit alto fue establecido. Todo ello hizo difícil cambiar de ASCII al EBCDIC de 8 bits (y también hizo difícil cambiar a las codificacións ASCII de 8 bits).
Diseño de página de códigos
Hay cientos de páginas de códigos EBCDIC basadas en la codificación de caracteres EBCDIC original; hay una variedad de páginas de códigos EBCDIC destinadas para su uso en diferentes partes del mundo, incluidas páginas de códigos para alfabetos no latinos como chino, japonés (por ejemplo, EBCDIC 930, JEF y KEIS), coreano y griego (EBCDIC 875). También hay una gran cantidad de variaciones con las letras intercambiadas sin razón aparente.
La siguiente tabla muestra el "subconjunto invariable" de EBCDIC, que son caracteres que deben tener las mismas asignaciones en todas las páginas de códigos EBCDIC que utilizan el alfabeto latino. (Esto incluye la mayor parte del repertorio invariable de ISO/IEC 646, excepto el signo de exclamación). También muestra (en gris) la puntuación ASCII y EBCDIC faltante, ubicada donde se encuentran en la página de códigos 37 (una de las variantes de la página de códigos de EBCDIC). Las celdas en blanco se llenan con caracteres específicos de la región en las variantes, pero los caracteres en gris a menudo también se intercambian o reemplazan. Al igual que ASCII, el subconjunto invariable solo funciona en inglés, sin incluir los préstamos.
EBCDIC | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
0x | NUL | SOH | STX | ETX | SEL | HT | RNL | DEL | GE | SPS | RPT | VT | FF | CR | SO | SI |
1x | DLE | DC1 | DC2 | DC3 | RES/ENP | NL | BS | POC | CAN | EM | UBS | CU1 | IFS | IGS | IRS | IUS/ ITB |
2x | DS | SOS | SM | WUS | BYP/INP | LF | ETB | ESC | SA | SFE | SM/SW | CSP | MFA | ENQ | ACK | BEL |
3x | SYN | IR | PP | TRN | NBS | EOT | SBS | IT | RFF | CU3 | DC4 | NAK | SUB | |||
4x | SP | ¢ | . | . | () | + | Silencio | |||||||||
5x | " | ! | $ | * | ) | ; | ¬ | |||||||||
6x | - | / | . | , | % | ¿Qué? | ■ | ? | ||||||||
7x | ` | : | # | @ | ' | = | " | |||||||||
8x | a | b | c | d | e | f | g | h | i | ± | ||||||
9x | j | k | l | m | n | o | p | q | r | |||||||
Ax | ~ | s | t | u | v | w | x | Sí. | z | |||||||
Bx | ^ | [ | ] | |||||||||||||
Cx | {} | A | B | C | D | E | F | G | H | I | ||||||
Dx | } | J | K | L | M | N | O | P | Q | R | ||||||
Ex | S | T | U | V | W | X | Y | Z | ||||||||
Fx | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | EO |
Definiciones de controles EBCDIC no ASCII
Las siguientes son las definiciones de los caracteres de control EBCDIC que no se asignan a los caracteres de control ASCII o tienen usos adicionales. Cuando se asignan a Unicode, estos se asignan principalmente a puntos de código de caracteres de control C1 de una manera especificada por la arquitectura de representación de datos de caracteres (CDRA) de IBM.
Aunque la asignación predeterminada de Nueva línea (NL) corresponde al carácter de siguiente línea (NEL) ISO/IEC 6429 (cuyo comportamiento también se especifica, pero no es obligatorio, en el Anexo 14 de Unicode), la mayoría de estos C1- los controles asignados no coinciden con los del conjunto ISO/IEC 6429 C1 ni con los de otros conjuntos de control C1 registrados, como ISO 6630. Aunque esto hace que los controles EBCDIC que no son ASCII sean un conjunto de control C1 único, no se encuentran entre los controles C1. conjuntos registrados en el registro ISO-IR, lo que significa que no tienen una secuencia de designación de conjunto de control asignada (según lo especificado por ISO/IEC 2022, y opcionalmente permitido en ISO/IEC 10646 (Unicode)).
Además de U+0085 (siguiente línea), el estándar Unicode no prescribe una interpretación de los caracteres de control C1, dejando su interpretación a protocolos de nivel superior (sugiere, pero no requiere, sus interpretaciones ISO/IEC 6429 en ausencia de uso para otros fines), por lo que esta asignación está permitida en Unicode, pero no está especificada por este.
Mnemonic | EBCDIC | Pareja CDRA | Nombre | Descripción |
---|---|---|---|---|
SEL | 04 | 009C | Seleccione | Personaje de control de dispositivos que toma un parámetro de un solo byte. |
PF | Punch Off | Listed in this location by GOST 19768-93. | ||
RNL | 06 | 0086 | Nueva línea requerida | Reasentamiento de ruptura de líneas Tab Indent modo |
LC | Caso inferior | Listed in this location by GOST 19768-93. | ||
GE | 08 | 0097 | Escape gráfico | Cambio sin bloqueo que cambia la interpretación del siguiente carácter (véase, por ejemplo, la página 310) del Código. Compare las SS2 de ISO/IEC 6429 (008E). |
SPS | 09 | 008D | Superscript | Comience superscript o deshacer subscript. Compare el PLU de ISO/IEC 6429 (008C). |
RPT | 0A | 008E | Repito | Cambiar a un modo de operación repitiendo un búfer de impresión |
SMM | Inicio del Mensaje Manual | Listed in this location by GOST 19768-93. | ||
RES/ENP | 14 | 009D | Restaurar, habilitar la presentación | Reanuda la producción (después BYP/INP) |
NL | 15 | 0085 (000A) | New Line | Rompe la línea. El mapeo por defecto (0085) coincide con el NEL de ISO/IEC 6429. Mappings a veces intercambiado con Line Feed (EBCDIC 0x25) de acuerdo con la convención de ruptura de línea UNIX. |
POC | 17 | 0087 | Program Operator Communication | Seguido por dos operadores de un byte que identifican la función específica, por ejemplo una llave de luz o función. Contraste con CSI (009B) de ISO/IEC 6429, OSC (009D) y APC (009F). |
IL | Idle | Listed in this location by GOST 19768-93. | ||
UBS | 1A | 0092 | Unit Backspace | Un backspace fraccional. |
CC | Control del cursor | Listed in this location by GOST 19768-93. | ||
CU1 | 1B | 008F | Uso del cliente | No utilizado por IBM; para el uso del cliente. |
IUS/ITB | 1F | 001F | Interchange Unit Separator, Intermediate Transmission Block | Se utiliza como separador de información para terminar un bloque llamado "unidad" (como en ASCII; vea también IR), o utilizado como código de control de transmisión para delimitar el final de un bloque intermedio. |
DS | 20 | 0080 | Digit Select | Usado por la instrucción S/360 CPU (ED) |
SOS | 21 | 0081 | Inicio del Significado | Usado por la instrucción S/360 CPU (ED). (Nota: diferente del SOS ISO/IEC 6429; donde es necesario distinguirlos, abrevia IBM abrevia el inicio de la significancia como SOS. (con un punto) y el comienzo de la cuerda como SOS , de lo contrario se abrevian lo mismo.)
|
SM, FDS | 22 | 0082 | Separador de campaña | Usado por la instrucción S/360 CPU (ED). (Nota: (Intercambio) Separador de archivos, como FS abreviado en ASCII, está en 0x1C y abreviado IFS.) |
WUS | 23 | 0083 | Word Underscore | Resucita la palabra inmediatamente anterior. Contraste con la SGR de ISO/IEC 6429. |
BYP/INP | 24 | 0084 | Bypass, Inhibit Presentation | Desactiva la salida, es decir, ignora todos los caracteres gráficos y caracteres de control además de los códigos de control de transmisión y RES/ENP, hasta el siguiente RES/ENP. |
SA | 28 | 0088 | Set Attribute | Marca el comienzo de una secuencia de control específica del dispositivo de longitud fija. Deprecated in favour of CSP. |
SFE | 29 | 0089 | Campo de inicio Extendido | Marca el comienzo de una secuencia de control específica del dispositivo de longitud variable. Deprecated in favour of CSP. |
SM/SW | 2A | 008A | Modo de configuración, interruptor | Control específico del dispositivo que establece un modo de operación, como un interruptor de buffer. |
CU2 | 2B | 008B | Uso del cliente Dos | Esto aparece en algunas especificaciones, como GOST 19768-93; nuevas especificaciones de IBM para los códigos de control EBCDIC lista sólo CU1 y CU3 como uso del cliente, y utilizar esta posición para CSP. |
CSP | Prefijo de secuencia de control | Marca el comienzo de una secuencia de control específica del dispositivo de longitud variable. Seguido por un byte de clase que especifica una categoría de función de control, un byte de cuenta que da la longitud de la secuencia (incluyendo los bytes de cuenta y tipo, pero no el byte de clase o el CSP inicial), un byte de tipo que identifica una función de control dentro de esa categoría, y cero o más bytes de parámetro. Contraste con DCS (0090) de ISO/IEC 6429 y CSI (009B). | ||
MFA | 2C | 008C | Modificar el atributo de campo | Marca el comienzo de una secuencia de control específica del dispositivo de longitud variable. Deprecated in favour of CSP. |
30 | 0090 | (reservado) | Reserved for future use by IBM | |
31 | 0091 | (reservado) | Reserved for future use by IBM | |
IR | 33 | 0093 | Índice | Cualquier movimiento para comenzar la próxima línea (ver también NL), o terminar una unidad de información (ver también IUS/ITB). |
PP | 34 | 0094 | Presentación | Seguido por dos parámetros de un byte (primera función, segundo número de columna o línea) para establecer la posición actual. Contraste con CUP y HVP de ISO/IEC 6429. |
PN | Punch On | Listed in this location by GOST 19768-93. | ||
TRN | 35 | 0095 | Transparent | Seguido por un parámetro byte que indica el número de bytes de datos transparentes que siguen. |
RST | Reader Stop | Listed in this location by GOST 19768-93. | ||
NBS | 36 | 0096 | Numérico Backspace | Mueva hacia atrás el ancho de un dígito. |
UC | Caso superior | Listed in this location by GOST 19768-93. | ||
SBS | 38 | 0098 | Subscript | Comience subscript o deshacer superscript. Compare el PLD de ISO/IEC 6429 (008B). |
IT | 39 | 0099 | Tab Indent | Identifica las líneas actuales y todas las siguientes, hasta RNL o RFF se encuentra. |
RFF | 3A | 009A | Formulario obligatorio | Reajuste de página Tab Indent Modo. |
CU3 | 3B | 009B | Uso del cliente Tres | No utilizado por IBM; para el uso del cliente. |
3E | 009E | (reservado) | Reserved for future use by IBM | |
EO | FF | 009F | Ocho uno | Todos los caracteres utilizados como relleno |
Páginas de códigos con conjuntos de caracteres Latin-1
Las siguientes páginas de códigos tienen el conjunto completo de caracteres Latin-1 (ISO/IEC 8859-1). La primera columna proporciona el número de página de códigos original. La segunda columna proporciona el número de la página de códigos actualizada con el signo del euro (€) en sustitución del signo de moneda universal (¤) (o en el caso de EBCDIC 924, con el conjunto cambiado para que coincida con ISO 8859-15)
CCSID | Euro actualización | Países |
---|---|---|
037 | 1140 | Australia, Brasil, Canadá, Nueva Zelandia, Portugal, Sudáfrica, Estados Unidos |
273 | 1141 | Austria, Alemania |
277 | 1142 | Dinamarca, Noruega |
278 | 1143 | Finlandia, Suecia |
280 | 1144 | Italia |
284 | 1145 | América Latina, España |
285 | 1146 | Irlanda, Reino Unido |
297 | 1147 | Francia |
500 | 1148 | Internacional |
871 | 1149 | Islandia |
1047 | 924 | Open Systems (MVS C compilador) |
Crítica y humor
El defensor del software de código abierto y desarrollador de software Eric S. Raymond escribe en su Jargon File que los piratas informáticos odiaban a EBCDIC, lo que significaba miembros de una subcultura de programadores entusiastas. El archivo de jerga 4.4.7 da la siguiente definición:
EBCDIC: /eb ́s@·dik/, /eb ́see`dik/, /eb ́k@·dik/, n. [abbreviation, Extended Binary Coded Decimal Interchange Code] An alleged character set used on IBM dinosaurs. Existe en al menos seis versiones mutuamente incompatibles, todas con deleites tales como secuencias de letras no contiguas y la ausencia de varios caracteres de puntuación ASCII bastante importante para los lenguajes modernos de la computadora (exactamente qué caracteres están ausentes varía según la versión de EBCDIC que estás mirando). IBM adaptó EBCDIC a partir del código de tarjetas perforadas a principios de los años 60 y lo promulgó como una táctica de control del cliente (ver conspiración de conexión), estimulando el estándar ASCII ya establecido. Hoy, IBM afirma ser una empresa de sistemas abiertos, pero la propia descripción de IBM de las variantes EBCDIC y cómo convertir entre ellas sigue siendo internamente clasificada top-secreta, quemada antes de leer. Hackers blanch en el mismo Nombre de EBCDIC y considerarlo una manifestación del mal más puro.
—El archivo Jargon 4.4.7
El diseño de EBCDIC también fue fuente de muchas bromas. Una de esas bromas, que se encuentra en el archivo de fortuna de Unix de 4.3BSD Reno (1990), decía:
Profesor: "Así que el gobierno estadounidense fue a IBM para inventar un estándar de encriptación, y se les ocurrió..."
Estudiante: "¡EBCDIC!"
Las referencias al juego de caracteres EBCDIC se hacen en la serie de juegos de computadora de 1979 Zork. En la "Sala de máquinas" en Zork II, EBCDIC se usa para implicar un lenguaje incomprensible:
Esta es una gran sala llena de maquinaria pesada surtida, que gime ruidosamente. La habitación huele a resistores quemados. A lo largo de una pared hay tres botones que son, respectivamente, redondos, triangulares y cuadrados. Naturalmente, por encima de estos botones se escriben instrucciones en EBCDIC...
En 2021, se hizo público que un banco belga todavía usaba EBCDIC internamente en 2019. Esto llamó la atención porque un cliente insistió en que la ortografía correcta de su apellido incluía una diéresis, que el banco omitió. El cliente presentó una reclamación invocando la garantía en el Reglamento General de Protección de Datos del derecho a la oportuna "rectificación de los datos personales inexactos". El banco argumentó en parte que no podía cumplir porque su sistema informático solo era compatible con EBCDIC, que no admite letras con diéresis. La corte de apelaciones falló a favor del cliente.
Contenido relacionado
Instituto SANS
Equipo terminal de datos
Radar doppler