EBCDIC - EBCDIC
Classificação | Codificações latinas básicas de 8 bits (não ASCII) |
---|---|
Precedido por | BCD |
Estendido Binary Coded Decimal Código Interchange ( EBCDIC ; / ɛ b s ɪ d ɪ k / ) é uma de oito bit caráter que codifica usado principalmente em mainframe IBM e IBM computador de médio porte sistemas operacionais. Ele descendia do código usado com cartões perfurados e do código decimal binário de seis bits correspondente, usado com a maioria dos periféricos de computador da IBM no final dos anos 1950 e início dos 1960. Ele é suportado por várias plataformas não IBM, como Fujitsu_Siemens ' BS2000 / OSD , SO-IV, MSP, MSP e-EX, a série de SDS Sigma , Unisys VS / 9 , Unisys MCP e ICL VME .
História
O EBCDIC foi desenvolvido em 1963 e 1964 pela IBM e foi anunciado com o lançamento da linha IBM System / 360 de computadores mainframe . É uma codificação de caracteres de oito bits, desenvolvida separadamente do esquema de codificação ASCII de sete bits . Foi criado para estender o Código de Intercâmbio Decimal Codificado em Binário (BCD) existente, ou BCDIC , que foi concebido como um meio eficiente de codificar as duas zonas e números de perfurações em cartões perfurados em seis bits. A codificação distinta de 's' e 'S' (usando a posição 2 em vez de 1) foi mantida a partir de cartões perfurados onde era desejável não ter furos muito próximos um do outro para garantir a integridade do cartão físico.
Embora a IBM tenha sido a principal proponente do comitê de padronização ASCII, a empresa não teve tempo para preparar periféricos ASCII (como máquinas perfuradoras de cartão) para serem enviados com seus computadores System / 360, então a empresa optou pelo EBCDIC. O System / 360 tornou-se um grande sucesso, junto com clones como RCA Spectra 70 , ICL System 4 e Fujitsu FACOM, assim como o EBCDIC.
Todos os sistemas operacionais e periféricos de mainframe e midrange IBM usam EBCDIC como sua codificação inerente (com tolerância para ASCII, por exemplo, ISPF em z / OS pode navegar e editar arquivos codificados EBCDIC e ASCII). Software e muitos periféricos de hardware podem ser convertidos de e para codificações, e mainframes modernos (como IBM Z ) incluem instruções do processador, no nível do hardware, para acelerar a tradução entre conjuntos de caracteres.
Existe um Formato de Transformação Unicode orientado para EBCDIC chamado UTF-EBCDIC proposto pelo consórcio Unicode, projetado para permitir fácil atualização do software EBCDIC para lidar com Unicode, mas não se destina a ser usado em ambientes de intercâmbio aberto. Mesmo em sistemas com amplo suporte EBCDIC, não é popular. Por exemplo, z / OS suporta Unicode (preferindo UTF-16 especificamente), mas z / OS tem suporte limitado para UTF-EBCDIC.
Nem todos os produtos IBM usam EBCDIC; IBM AIX , Linux em IBM Z e Linux em Power usam ASCII.
Compatibilidade com ASCII
Houve inúmeras dificuldades para escrever software que funcionasse em ASCII e EBCDIC.
- As lacunas entre as letras faziam com que o código simples que funcionava em ASCII falhasse no EBCDIC. Por exemplo , imprimiria o alfabeto de A a Z se ASCII fosse usado, mas imprimiria 41 caracteres (incluindo vários caracteres não atribuídos) em EBCDIC. Corrigir isso exigia complicar o código com chamadas de função que eram muito resistidas pelos programadores.
for (c = 'A'; c <= 'Z'; ++c) putchar(c);
- A classificação EBCDIC coloca as letras minúsculas antes das maiúsculas e as letras antes dos números, exatamente o oposto de ASCII.
- Linguagens de programação e formatos de arquivo e protocolos de rede projetados para ASCII rapidamente fizeram uso de marcas de pontuação disponíveis (como as chaves { e } ) que não existiam em EBCDIC, dificultando a tradução para sistemas EBCDIC. Por outro lado, EBCDIC tinha alguns caracteres, como ¢ ( cêntimos dos EUA ), que foram usados em sistemas IBM e não podiam ser traduzidos para ASCII.
- A convenção de nova linha mais comum usada com EBCDIC é usar um código NEL (NEXT LINE) entre as linhas. Os conversores para outras codificações geralmente substituem NEL por LF ou CR / LF , mesmo se houver um NEL na codificação de destino. Isso faz com que o LF e o NEL sejam traduzidos para o mesmo caractere e não possam ser distinguidos.
- Se o ASCII de sete bits foi usado, havia um bit alto "não usado" em bytes de 8 bits e muitos softwares armazenavam outras informações lá. O software também compactaria os sete bits e descartaria o oitavo, como, por exemplo, compactar cinco caracteres ASCII de sete bits em uma palavra de 36 bits . No PDP-11, os bytes com o bit alto definido foram tratados como números negativos, comportamento que foi copiado para C , causando problemas inesperados se o bit alto foi definido. Tudo isso dificultou a mudança de ASCII para EBCDIC de 8 bits (e também dificultou a mudança para codificações ASCII estendidas de 8 bits ).
Layout da página de código
Existem centenas de páginas de código EBCDIC baseadas na codificação de caracteres EBCDIC original; há uma variedade de páginas de código EBCDIC destinadas ao uso em diferentes partes do mundo, incluindo páginas de código para scripts não latinos, como chinês, japonês (por exemplo, EBCDIC 930, JEF e KEIS), coreano e grego (EBCDIC 875 ) Também há um grande número de variações com as letras trocadas sem motivo aparente.
A tabela a seguir mostra o "subconjunto invariável" de EBCDIC, que são caracteres que devem ter as mesmas designações em todas as páginas de código EBCDIC que usam o alfabeto latino. Ele também mostra (em cinza) pontuação ASCII e EBCDIC ausente, localizada onde estão na Página de código 37 (uma das variantes da página de código de EBCDIC). As células em branco são preenchidas com caracteres específicos da região nas variantes, mas os caracteres em cinza são frequentemente trocados ou substituídos também. Em cada célula, a primeira linha é uma abreviatura de um código de controle ou do próprio caractere; e a segunda linha é o código Unicode (em branco para controles que não existem no Unicode).
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _UMA | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ |
NUL 0000 |
SOH 0001 |
STX 0002 |
ETX 0003 |
SEL |
HT 0009 |
RNL |
DEL 007F |
GE |
SPS |
RPT |
VT 000B |
FF 000C |
CR 000D |
SO 000E |
SI 000F |
1_ |
DLE 0010 |
DC1 0011 |
DC2 0012 |
DC3 0013 |
res / enp |
NL 0085 |
BS 0008 |
POC |
CAN 0018 |
EM 0019 |
UBS |
CU1 |
IFS 001C |
IGS 001D |
IRS 001E |
ius / itb 001F |
2_ |
DS |
SOS |
FS |
WUS |
byp / inp |
LF 000A |
ETB 0017 |
ESC 001B |
SA |
SFE |
sm / sw |
CSP |
MFA |
ENQ 0005 |
ACK 0006 |
BEL 0007 |
3_ |
SYN 0016 |
IR |
PP |
TRN |
NBS |
EOT 0004 |
SBS |
ISTO |
RFF |
CU3 |
DC4 0014 |
NAK 0015 |
SUB 001A |
|||
4_ |
SP 0020 |
¢ 00A2 |
. 002E |
< 003C |
( 0028 |
+ 002B |
| 007C |
|||||||||
5_ |
& 0026 |
! 0021 |
$ 0024 |
* 002A |
) 0029 |
; 003B |
¬ 00AC |
|||||||||
6_ |
- 002D |
/ 002F |
¦ 00A6 |
, 002C |
% 0025 |
_ 005F |
> 003E |
? 003F |
||||||||
7_ |
` 0060 |
: 003A |
# 0023 |
@ 0040 |
' 0027 |
= 003D |
" 0022 |
|||||||||
8_ |
a 0061 |
b 0062 |
c 0063 |
d 0064 |
e 0065 |
f 0066 |
g 0067 |
h 0068 |
eu 0069 |
± 00B1 |
||||||
9_ |
j 006A |
k 006B |
l 006C |
m 006D |
n 006E |
o 006F |
p 0070 |
q 0071 |
r 0072 |
|||||||
UMA_ |
~ 007E |
s 0073 |
t 0074 |
u 0075 |
v 0076 |
w 0077 |
x 0078 |
y 0079 |
z 007A |
|||||||
B_ |
^ 005E |
[ 005B |
] 005D |
|||||||||||||
C_ |
{ 007B |
A 0041 |
B 0042 |
C 0043 |
D 0044 |
E 0045 |
F 0046 |
G 0047 |
H 0048 |
I 0049 |
||||||
D_ |
} 007D |
J 004A |
K 004B |
L 004C |
M 004D |
N 004E |
O 004F |
P 0050 |
Q 0051 |
R 0052 |
||||||
E_ |
\ 005C |
S 0053 |
T 0054 |
U 0055 |
V 0056 |
W 0057 |
X 0058 |
Y 0059 |
Z 005A |
|||||||
F_ |
0 0030 |
1 0031 |
2 0032 |
3 0033 |
4 0034 |
5 0035 |
6 0036 |
7 0037 |
8 0038 |
9 0039 |
EO |
Carta Número Pontuação Símbolo De outros Indefinido
Definições de controles EBCDIC não ASCII
A seguir estão as definições de caracteres de controle EBCDIC que não são mapeados para os caracteres de controle ASCII ou têm usos adicionais. Quando mapeados para Unicode, eles são principalmente mapeados para pontos de código de caracteres de controle C1 de uma maneira especificada pela Character Data Representation Architecture (CDRA) da IBM.
Embora o mapeamento padrão de Nova Linha (NL) corresponda ao caractere ISO / IEC 6429 Próxima Linha (NEL) (o comportamento do qual também é especificado, mas não obrigatório, no Unicode Anexo 14), a maioria desses controles mapeados em C1 correspondem nem aqueles no conjunto ISO / IEC 6429 C1 , nem aqueles em outros conjuntos de controle C1 registrados, como ISO 6630 . Embora isso efetivamente torne os controles EBCDIC não ASCII um conjunto de controle C1 exclusivo, eles não estão entre os conjuntos de controle C1 registrados no registro ISO-IR , o que significa que não têm uma sequência de designação de conjunto de controle atribuída (conforme especificado pela ISO / IEC 2022 , e opcionalmente permitido na ISO / IEC 10646 (Unicode)).
Além de U + 0085 (próxima linha), o padrão Unicode não prescreve uma interpretação de caracteres de controle C1, deixando sua interpretação para protocolos de nível superior (sugere, mas não exige, suas interpretações ISO / IEC 6429 na ausência de uso para outros propósitos), portanto, esse mapeamento é permitido, mas não é especificado por Unicode.
Mnemônico | EBCDIC | Emparelhamento CDRA | Nome | Descrição |
---|---|---|---|---|
SEL | 04 | 009C | Selecione | Caractere de controle de dispositivo usando um parâmetro de byte único. |
RNL | 06 | 0086 | Nova Linha Requerida | Redefinição de quebra de linha Modo de recuo da guia |
GE | 08 | 0097 | Escape Gráfico | Mudança sem bloqueio que altera a interpretação do seguinte caractere (consulte, por exemplo, página de código 310 ). Compare ISO / IEC 6429 SS2 (008E). |
SPS | 09 | 008D | Sobrescrito | Começar sobrescrito ou desfazer subscrito. Compare ISO / IEC 6429's PLU (008C). |
RPT | 0A | 008E | Repetir | Mudar para um modo de operação repetindo um buffer de impressão |
RES / ENP | 14 | 009D | Restaurar, habilitar apresentação | Retomar a saída (após BYP / INP ) |
NL | 15 | 0085 (000A) | Nova linha | Quebra de linha. O mapeamento padrão (0085) corresponde ao NEL do ISO / IEC 6429 . Os mapeamentos às vezes trocavam com Line Feed (EBCDIC 0x25) de acordo com a convenção de quebra de linha do UNIX. |
POC | 17 | 0087 | Comunicação do operador do programa | Seguido por dois operadores de um byte que identificam a função específica, por exemplo, uma luz ou tecla de função. Compare com ISO / IEC 6429's CSI (009B), OSC (009D) e APC (009F). |
UBS | 1A | 0092 | Espaço traseiro da unidade | Um retrocesso fracionário. |
CU1 | 1B | 008F | Cliente Use Um | Não usado pela IBM; para uso do cliente. |
IUS / ITB | 1F | 001F | Separador de Unidade de Intercâmbio, Bloco de Transmissão Intermediário | Pode ser usado como separador de informações para encerrar um bloco denominado "unidade" (como em ASCII ; consulte também IR ) ou como código de controle de transmissão para delimitar o final de um bloco intermediário. |
DS | 20 | 0080 | Seleção de dígitos | Usado pela instrução de edição de CPU S / 360 (ED) |
SOS | 21 | 0081 | Início da Significância | Usado pela instrução S / 360 CPU edit (ED). (Nota: diferente do SOS ISO / IEC 6429 ). |
FS | 22 | 0082 | Separador de Campo | Usado pela instrução S / 360 CPU edit (ED). (Nota: (Interchange) File Separator , como FS abreviado em ASCII, está em 0x1C e abreviado IFS.) |
WUS | 23 | 0083 | Sublinhado de palavra | Destaca a palavra imediatamente anterior. Compare com SGR da ISO / IEC 6429 . |
BYP / INP | 24 | 0084 | Ignorar, inibir a apresentação | Desativa a saída, ou seja, ignora todos os caracteres gráficos e caracteres de controle além dos códigos de controle de transmissão e RES / ENP, até o próximo RES / ENP . |
SA | 28 | 0088 | Definir Atributo | Marca o início de uma sequência de controle específica de dispositivo de comprimento fixo. Obsoleto em favor de CSP . |
SFE | 29 | 0089 | Campo de início estendido | Marca o início de uma sequência de controle específica de dispositivo de comprimento variável. Obsoleto em favor de CSP . |
SM / SW | 2A | 008A | Definir modo, alternar | Controle específico do dispositivo que define um modo de operação, como uma chave de buffer. |
CSP | 2B | 008B | Prefixo da sequência de controle | Marca o início de uma sequência de controle específica de dispositivo de comprimento variável. Seguido por um byte de classe especificando uma categoria de função de controle, um byte de contagem fornecendo o comprimento da sequência (incluindo bytes de contagem e tipo, mas não o byte de classe ou CSP inicial), um byte de tipo identificando uma função de controle dentro dessa categoria e zero ou mais bytes de parâmetro. Compare com ISO / IEC 6429's DCS (0090) e CSI (009B). |
MFA | 2C | 008C | Modificar atributo de campo | Marca o início de uma sequência de controle específica de dispositivo de comprimento variável. Obsoleto em favor de CSP . |
30 | 0090 | (reservado) | Reservado para uso futuro pela IBM | |
31 | 0091 | (reservado) | Reservado para uso futuro pela IBM | |
IR | 33 | 0093 | Retorno do índice | Mova para o início da próxima linha (consulte também NL ) ou encerre uma unidade de informação (consulte também IUS / ITB ). |
PP | 34 | 0094 | Posição de Apresentação | Seguido por dois parâmetros de um byte (primeiro função, segundo número de qualquer coluna ou linha) para definir a posição atual. Compare com ISO / IEC 6429's CUP e HVP . |
TRN | 35 | 0095 | Transparente | Seguido por um parâmetro de byte que indica o número de bytes de dados transparentes que se seguem. |
NBS | 36 | 0096 | Backspace numérico | Mova para trás a largura de um dígito. |
SBS | 38 | 0098 | Subscrito | Comece subscrito ou desfaça sobrescrito. Compare o PLD do ISO / IEC 6429 (008B). |
ISTO | 39 | 0099 | Tabulação de recuo | Recua a linha atual e todas as linhas seguintes, até que RNL ou RFF seja encontrado. |
RFF | 3A | 009A | Feed de formulário obrigatório | Redefinição de quebra de página no modo Recuar guia . |
CU3 | 3B | 009B | Cliente Uso Dois | Não usado pela IBM; para uso do cliente. |
3E | 009E | (reservado) | Reservado para uso futuro pela IBM | |
EO | FF | 009F | Oito Uns | Todos os caracteres usados como preenchimento |
Páginas de código com conjuntos de caracteres Latin-1
As páginas de código a seguir têm o conjunto completo de caracteres Latin-1 (ISO / IEC 8859-1). A primeira coluna fornece o número da página de código original. A segunda coluna fornece o número da página de código atualizada com o símbolo do euro (€) substituindo o símbolo da moeda universal (¤) (ou no caso de EBCDIC 924, com o conjunto alterado para corresponder ao ISO 8859-15 )
CCSID | Atualização do euro |
Países |
---|---|---|
037 | 1140 | Austrália, Brasil, Canadá, Nova Zelândia, Portugal, África do Sul, EUA |
273 | 1141 | Áustria, Alemanha |
277 | 1142 | Dinamarca, Noruega |
278 | 1143 | Finlândia, Suécia |
280 | 1144 | Itália |
284 | 1145 | América Latina, Espanha |
285 | 1146 | Irlanda, Reino Unido |
297 | 1147 | França |
500 | 1148 | Internacional |
871 | 1149 | Islândia |
1047 | 924 | Sistemas abertos ( compilador MVS C ) |
Crítica e humor
O defensor do software de código aberto e desenvolvedor de software Eric S. Raymond escreve em seu Jargon File que EBCDIC era odiado pelos hackers, o que significava membros de uma subcultura de programadores entusiasmados. O Jargon File 4.4.7 fornece a seguinte definição:
EBCDIC: / eb´s @ · dik /, / eb´see`dik /, / eb´k @ · dik /, n. [abreviatura, Extended Binary Coded Decimal Interchange Code] Um suposto conjunto de caracteres usado em dinossauros IBM. Ele existe em pelo menos seis versões mutuamente incompatíveis, todas apresentando delícias como sequências de letras não contíguas e a ausência de vários caracteres de pontuação ASCII bastante importantes para as linguagens de computador modernas (exatamente quais caracteres estão ausentes varia de acordo com qual versão de EBCDIC você está olhando para). A IBM adaptou o EBCDIC do código de cartão perfurado no início dos anos 1960 e o promulgou como uma tática de controle do cliente (consulte a conspiração do conector ), rejeitando o padrão ASCII já estabelecido. Hoje, a IBM afirma ser uma empresa de sistemas abertos , mas a própria descrição da IBM das variantes EBCDIC e como converter entre elas ainda é internamente classificada como ultrassecreta, queimar antes de ler. Os hackers empalidecem com o próprio nome de EBCDIC e consideram isso uma manifestação do mais puro mal.
- O arquivo Jargon 4.4.7
O design EBCDIC também foi fonte de muitas piadas. Uma dessas piadas foi:
Professor: "Então, o governo americano procurou a IBM para apresentar um padrão de criptografia e eles criaram—"
Aluno: "EBCDIC!"
As referências ao conjunto de caracteres EBCDIC são feitas na clássica série de jogos de aventura da Infocom, Zork . Na "Sala de Máquinas" do Zork II , EBCDIC é usado para sugerir uma linguagem incompreensível:
Esta é uma grande sala cheia de máquinas pesadas variadas, zumbindo ruidosamente. A sala cheira a resistências queimadas. Ao longo de uma parede estão três botões que são, respectivamente, redondos, triangulares e quadrados. Naturalmente, acima desses botões estão as instruções escritas em EBCDIC ...
Veja também
Referências
links externos
- Character Data Representation Architecture (CDRA) da IBM na Wayback Machine (arquivado em 13/05/2018). Contém informações oficiais da IBM sobre páginas de código e conjuntos de caracteres.
- Referência de página de código do host da IBM, mostra gráficos de código para várias páginas EBCDIC de byte único.
- "Páginas de código" .da "globalização IBM i" .
- ICU Converter Explorer Contém mais informações sobre EBCDIC derivado de CDRA da IBM, incluindo DBCS EBCDIC (Double Byte Character Set EBCDIC)
- Tabelas de mapeamento de conjunto de caracteres ICU Contém tabelas de mapeamento Unicode legíveis por computador para EBCDIC e muitos outros conjuntos de caracteres
- Lista de caracteres EBCDIC , incluindo valores decimais e hexadecimais, nome simbólico e caractere / função
- Páginas de código EBCDIC com Latin-1-charset (JavaScript)
- Todas as páginas de código EBCDIC e códigos de escape de gráficos 3270 na Wayback Machine (arquivado em 27 de agosto de 2016)