EBCDIC - EBCDIC

Famille de codage EBCDIC
Classification Codages latins de base 8 bits (non ASCII)
Précédé par BCD

Extended Binary Coded Decimal code d' échange ( EBCDIC ; / ɛ b s ɪ d ɪ k / ) est un huit bits codage de caractères utilisé principalement sur mainframe IBM et IBM ordinateur de milieu de gamme des systèmes d'exploitation. Il est issu du code utilisé avec les cartes perforées et du code décimal codé binaire à six bits correspondant utilisé avec la plupart des périphériques informatiques d'IBM de la fin des années 1950 et du début des années 1960. Il est pris en charge par les différentes plates - formes non-IBM, tels que Fujitsu-Siemens de BS2000 / OSD , OS-IV, MSP et MSP-EX, la série SDS Sigma , Unisys VS / 9 , Unisys MCP et ICL VME .

Histoire

Carte perforée avec le codage Hollerith du jeu de caractères EBCDIC 1964. Le contraste en haut est amélioré pour montrer les caractères imprimés.

EBCDIC a été conçu en 1963 et 1964 par IBM et a été annoncé avec la sortie de la gamme IBM System/360 d' ordinateurs centraux . Il s'agit d'un codage de caractères à huit bits, développé séparément du schéma de codage ASCII à sept bits . Il a été créé pour étendre le code d'échange décimal codé binaire (BCD) existant , ou BCDIC , qui lui-même a été conçu comme un moyen efficace d'encoder les deux zones et les chiffres sur les cartes perforées en six bits. L'encodage distinct de 's' et 'S' (en utilisant la position 2 au lieu de 1) a été maintenu à partir des cartes perforées où il était souhaitable de ne pas avoir de perforations trop proches les unes des autres pour assurer l'intégrité de la carte physique.

Alors qu'IBM était l'un des principaux promoteurs du comité de normalisation ASCII, la société n'a pas eu le temps de préparer les périphériques ASCII (tels que les machines à perforer les cartes) à expédier avec ses ordinateurs System/360, la société a donc opté pour EBCDIC. Le System/360 a connu un vif succès, ainsi que des clones tels que RCA Spectra 70 , ICL System 4 et Fujitsu FACOM, tout comme EBCDIC.

Tous les périphériques et systèmes d'exploitation mainframe et milieu de gamme IBM utilisent EBCDIC comme codage inhérent (avec la tolérance pour ASCII, par exemple, ISPF dans z/OS peut parcourir et éditer les fichiers codés EBCDIC et ASCII). Les logiciels et de nombreux périphériques matériels peuvent traduire vers et depuis les encodages, et les mainframes modernes (tels que IBM Z ) incluent des instructions de processeur, au niveau matériel, pour accélérer la traduction entre les jeux de caractères.

Il existe un format de transformation Unicode orienté EBCDIC appelé UTF-EBCDIC proposé par le consortium Unicode, conçu pour permettre une mise à jour facile du logiciel EBCDIC pour gérer Unicode, mais non destiné à être utilisé dans des environnements d'échange ouverts. Même sur les systèmes avec un support EBCDIC étendu, il n'a pas été populaire. Par exemple, z/OS prend en charge Unicode (préférant spécifiquement UTF-16 ), mais z/OS n'a qu'une prise en charge limitée d'UTF-EBCDIC.

Tous les produits IBM n'utilisent pas EBCDIC ; IBM AIX , Linux on IBM Z et Linux on Power utilisent tous ASCII.

Compatibilité avec ASCII

Il y avait de nombreuses difficultés à écrire un logiciel qui fonctionnerait à la fois en ASCII et en EBCDIC.

  • Les écarts entre les lettres ont fait un code simple qui fonctionnait en ASCII échoue sur EBCDIC. Par exemple , imprimerait l'alphabet de A à Z si ASCII est utilisé, mais imprimerait 41 caractères (y compris un certain nombre de caractères non affectés) en EBCDIC. Corriger cela nécessitait de compliquer le code avec des appels de fonction, ce qui a été fortement résisté par les programmeurs.for (c = 'A'; c <= 'Z'; ++c) putchar(c);
  • Le tri EBCDIC met les minuscules avant les majuscules et les lettres avant les chiffres, exactement le contraire de l'ASCII.
  • Les langages de programmation, les formats de fichiers et les protocoles réseau conçus pour l'ASCII ont rapidement utilisé les signes de ponctuation disponibles (tels que les accolades { et } ) qui n'existaient pas dans EBCDIC, rendant la traduction vers les systèmes EBCDIC difficile. Inversement, EBCDIC comportait quelques caractères tels que ¢ ( cents américains ) qui étaient utilisés sur les systèmes IBM et ne pouvaient pas être traduits en ASCII.
  • La convention de retour à la ligne la plus couramment utilisée avec EBCDIC consiste à utiliser un code NEL (NEXT LINE) entre les lignes. Les convertisseurs vers d'autres encodages remplacent souvent NEL par LF ou CR/LF , même s'il y a un NEL dans l'encodage cible. Cela fait que LF et NEL se traduisent par le même caractère et ne peuvent pas être distingués.
  • Si l'ASCII à sept bits était utilisé, il y avait un bit de poids fort "inutilisé" dans les octets de 8 bits, et de nombreux logiciels y stockaient d'autres informations. Le logiciel empaqueterait également les sept bits et éliminerait le huitième, comme par exemple empaqueter cinq caractères ASCII de sept bits dans un mot de 36 bits . Sur le PDP-11, les octets avec le bit de poids fort étaient traités comme des nombres négatifs, un comportement qui a été copié dans C , causant des problèmes inattendus si le bit de poids fort était défini. Tout cela rendait difficile le passage de l'ASCII à l'EBCDIC 8 bits (et rendait également difficile le passage aux codages ASCII étendus 8 bits ).

Mise en page de la page de codes

Il existe des centaines de pages de codes EBCDIC basées sur le codage de caractères EBCDIC d'origine ; il existe une variété de pages de codes EBCDIC destinées à être utilisées dans différentes parties du monde, y compris des pages de codes pour les scripts non latins tels que le chinois, le japonais (par exemple, EBCDIC 930, JEF et KEIS), le coréen et le grec (EBCDIC 875 ). Il existe également un grand nombre de variations avec les lettres échangées sans raison discernable.

Le tableau ci-dessous montre le "sous-ensemble invariant" d'EBCDIC, qui sont des caractères qui doivent avoir les mêmes affectations sur toutes les pages de codes EBCDIC qui utilisent l'alphabet latin. Il montre également (en gris) les signes de ponctuation ASCII et EBCDIC manquants, situés là où ils se trouvent dans la page de code 37 (une des variantes de page de code d'EBCDIC). Les cellules vides sont remplies de caractères spécifiques à la région dans les variantes, mais les caractères en gris sont souvent échangés ou remplacés également. Dans chaque cellule, la première ligne est l'abréviation d'un code de contrôle ou du caractère lui-même ; et la deuxième ligne est le code Unicode (vide pour les contrôles qui n'existent pas en Unicode).

EBCDIC
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _UNE _B _C _RÉ _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
 
Pays-
Bas 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
 
BF
000A
ETB
0017
ESC
001B
SA
 
SFE
 
sm/sw
 
CSP
 
AMF
 
ENQ
0005
ACK
0006
BEL
0007
3_ SYN
0016
RI
 
PP
 
TRN
 
NBS
 
EOT
0004
SBS
 
CE
 
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_ un
0061
b
0062
c
0063
d
0064
e
0065
f
0066
g
0067
h
0068
je
0069
±
00B1
9_ j
006A
k
006B
l
006C
m
006D
n
006E
o
006F
p
0070
q
0071
r
0072
UNE_ ~
007E
s
0073
t
0074
u
0075
v
0076
avec
0077
x
0078
et
0079
z
007A
B_ ^
005E
[
005B
]
005D
C_ {
007B
Un
0041
B
0042
C
0043
D
0044
E
0045
F
0046
G
0047
H
0048
je
0049
RÉ_ }
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
OE
 

  Lettre  Nombre  Ponctuation  symbole  Autre  Indéfini

Définitions des contrôles EBCDIC non ASCII

Voici les définitions des caractères de contrôle EBCDIC qui ne correspondent pas aux caractères de contrôle ASCII ou ont des utilisations supplémentaires. Lorsqu'ils sont mappés sur Unicode, ils sont principalement mappés sur des points de code de caractères de contrôle C1 d'une manière spécifiée par l'architecture de représentation des données de caractères (CDRA) d'IBM.

Bien que le mappage par défaut de la nouvelle ligne (NL) corresponde au caractère ISO/IEC 6429 Next Line (NEL) (dont le comportement est également spécifié, mais pas obligatoire, dans l'annexe 14 d'Unicode), la plupart de ces contrôles mappés C1 correspondent ni ceux de l' ensemble ISO/IEC 6429 C1 , ni ceux d' autres ensembles de contrôle C1 enregistrés tels que l' ISO 6630 . Bien que cela fasse effectivement des contrôles EBCDIC non ASCII un ensemble de contrôle C1 unique, ils ne font pas partie des ensembles de contrôle C1 enregistrés dans le registre ISO-IR , ce qui signifie qu'ils n'ont pas de séquence de désignation d'ensemble de contrôle attribuée (comme spécifié par ISO/ CEI 2022 , et facultativement autorisé dans ISO/CEI 10646 (Unicode)).

Outre U+0085 (Next Line), la norme Unicode ne prescrit pas d'interprétation des caractères de contrôle C1, laissant leur interprétation aux protocoles de niveau supérieur (elle suggère, mais n'exige pas, leurs interprétations ISO/IEC 6429 en l'absence d'utilisation pour à d'autres fins), de sorte que ce mappage est autorisé dans, mais non spécifié par, Unicode.

Mnémonique EBCDIC appariement CDRA Nom La description
SEL 04 009C Sélectionner Caractère de contrôle de périphérique prenant un paramètre à un octet.
RNL 06 0086 Nouvelle ligne requise Saut de ligne réinitialisant le mode de tabulation de retrait
GE 08 0097 Évasion Graphique Décalage non bloquant qui modifie l'interprétation du caractère suivant (voir par ex. Code page 310 ). Comparez ISO/IEC 6429 SS2 (008E).
SPS 09 008D Exposant Commencer l'exposant ou annuler l'indice. Comparez le PLU d' ISO/IEC 6429 (008C).
RPT 0A 008E Répéter Passer à un mode de fonctionnement répétant un tampon d'impression
RES/ENP 14 009D Restaurer, activer la présentation Reprendre la sortie (après BYP/INP )
Pays-Bas 15 0085 (000A) Nouvelle ligne Saut de ligne. Le mappage par défaut (0085) correspond au NEL ISO/IEC 6429 . Les mappages sont parfois échangés avec le saut de ligne (EBCDIC 0x25) conformément à la convention de saut de ligne UNIX.
POC 17 0087 Communication avec l'opérateur du programme Suivi de deux opérateurs d'un octet qui identifient la fonction spécifique, par exemple un voyant ou une touche de fonction. Contraste avec les normes ISO/IEC 6429 CSI (009B), OSC (009D) et APC (009F).
UBS 1A 0092 Retour arrière de l'unité Un retour arrière fractionnaire.
CU1 1B 008F Le client utilise un Non utilisé par IBM ; à l'usage du client.
SIU/ITB 1F 001F Séparateur d'unité d'échange, bloc de transmission intermédiaire Soit utilisé comme séparateur d'informations pour terminer un bloc appelé "unité" (comme en ASCII ; voir aussi IR ), soit utilisé comme code de contrôle de transmission pour délimiter la fin d'un bloc intermédiaire.
DS 20 0080 Sélection de chiffres Utilisé par l'instruction d'édition (ED) du processeur S/360
SOS 21 0081 Début d'importance Utilisé par l'instruction d'édition (ED) du processeur S/360. (Remarque : différent du SOS ISO/IEC 6429. )
FS 22 0082 Séparateur de champs Utilisé par l'instruction d'édition (ED) du processeur S/360. (Remarque : (Interchange) File Separator , en abrégé FS en ASCII, est à 0x1C et abrégé IFS.)
WUS 23 0083 Soulignement de mot Souligne le mot immédiatement précédent. Contraste avec le SGR ISO/IEC 6429 .
BYP/INP 24 0084 Contourner, interdire la présentation Désactive la sortie, c'est-à-dire ignore tous les caractères graphiques et les caractères de contrôle en plus des codes de contrôle de transmission et RES/ENP, jusqu'au prochain RES/ENP .
SA 28 0088 Définir l'attribut Marque le début d'une séquence de contrôle spécifique à un périphérique de longueur fixe. Obsolète au profit de CSP .
SFE 29 0089 Champ de début étendu Marque le début d'une séquence de contrôle spécifique à un périphérique de longueur variable. Obsolète au profit de CSP .
SM/SW 2A 008A Définir le mode, basculer Contrôle spécifique à l'appareil qui définit un mode de fonctionnement, tel qu'un commutateur de mémoire tampon.
CSP 2B 008B Préfixe de séquence de contrôle Marque le début d'une séquence de contrôle spécifique à un périphérique de longueur variable. Suivi par un octet de classe spécifiant une catégorie de fonction de contrôle, un octet de comptage donnant la longueur de la séquence (y compris les octets de comptage et de type, mais pas l'octet de classe ou le CSP initial), un octet de type identifiant une fonction de contrôle dans cette catégorie, et zéro ou plus d'octets de paramètres. Contraste avec les normes DCS (0090) et CSI (009B) d'ISO/IEC 6429 .
AMF 2C 008C Modifier l'attribut de champ Marque le début d'une séquence de contrôle spécifique à un périphérique de longueur variable. Obsolète au profit de CSP .
30 0090 (réservé) Réservé à une utilisation future par IBM
31 0091 (réservé) Réservé à une utilisation future par IBM
RI 33 0093 Rendement de l'indice Soit passer au début de la ligne suivante (voir aussi NL ), soit terminer une unité d'information (voir aussi IUS/ITB ).
PP 34 0094 Poste de présentation Suivi de deux paramètres d'un octet (d'une part la fonction, d'autre part le numéro de colonne ou de ligne) pour définir la position actuelle. Contraste avec ISO/IEC 6429 CUP et HVP .
TRN 35 0095 Transparent Suivi par un paramètre d'octet qui indique le nombre d'octets de données transparentes qui suivent.
NBS 36 0096 Retour arrière numérique Reculez de la largeur d'un chiffre.
SBS 38 0098 Indice Commencer l'indice ou annuler l'exposant. Comparez le PLD d' ISO/IEC 6429 (008B).
CE 39 0099 Onglet Retrait Met en retrait la ligne actuelle et toutes les lignes suivantes, jusqu'à ce que RNL ou RFF soit rencontré.
RFF 3A 009A Flux de formulaire requis Saut de page réinitialisant le mode Tabulation de retrait .
CU3 3B 009B Utilisation par le client deux Non utilisé par IBM ; à l'usage du client.
3E 009E (réservé) Réservé à une utilisation future par IBM
OE FF 009F Huit Tous les caractères utilisés comme remplissage

Pages de codes avec des jeux de caractères Latin-1

Les pages de codes suivantes contiennent le jeu complet de caractères Latin-1 (ISO/IEC 8859-1). La première colonne donne le numéro de page de code d'origine. La deuxième colonne donne le numéro de la page de code mise à jour avec le signe euro (€) remplaçant le signe universel de la monnaie (¤) (ou dans le cas de EBCDIC 924, avec l'ensemble modifié pour correspondre à ISO 8859-15 )

CCSID
Mise à jour de l' euro
Des pays
037 1140 Australie, Brésil, Canada, Nouvelle-Zélande, Portugal, Afrique du Sud, États-Unis
273 1141 Autriche, Allemagne
277 1142 Danemark, Norvège
278 1143 Finlande, Suède
280 1144 Italie
284 1145 Amérique latine, Espagne
285 1146 Irlande, Royaume-Uni
297 1147 La France
500 1148 International
871 1149 Islande
1047 924 Systèmes ouverts ( compilateur MVS C )

Critique et humour

Le défenseur des logiciels open source et développeur de logiciels Eric S. Raymond écrit dans son Jargon File qu'EBCDIC était détesté par les pirates informatiques, ce qui signifie qu'il entendait les membres d'une sous-culture de programmeurs enthousiastes. Le Jargon File 4.4.7 donne la définition suivante :

EBCDIC : /eb´s@·dik/, /eb´see`dik/, /eb´k@·dik/, n. [abréviation, Extended Binary Coded Decimal Interchange Code] Un jeu de caractères présumé utilisé sur les dinosaures IBM. Il existe dans au moins six versions mutuellement incompatibles, toutes présentant des délices tels que des séquences de lettres non contiguës et l'absence de plusieurs caractères de ponctuation ASCII assez importants pour les langages informatiques modernes (les caractères absents varient selon la version d'EBCDIC que vous utilisez. regarder). IBM a adapté EBCDIC à partir du code de la carte perforée au début des années 1960 et l'a promulgué comme une tactique de contrôle client (voir le complot des connecteurs ), rejetant la norme ASCII déjà établie. Aujourd'hui, IBM prétend être une entreprise de systèmes ouverts , mais la propre description d'IBM des variantes EBCDIC et de la façon de convertir entre elles est toujours classée en interne top secret, à graver avant lecture. Les hackers blanchissent au nom même d'EBCDIC et le considèrent comme une manifestation du mal le plus pur.

—  Le fichier Jargon 4.4.7

Le design EBCDIC a également été à l'origine de nombreuses blagues. Une de ces blagues disait :

Professeur : « Donc, le gouvernement américain est allé chez IBM pour proposer une norme de cryptage , et ils ont proposé... »
Étudiant : « EBCDIC ! »

Les références au jeu de caractères EBCDIC sont faites dans la série de jeux d'aventure classique d'Infocom Zork . Dans la "Machine Room" de Zork II , EBCDIC est utilisé pour sous-entendre un langage incompréhensible :

C'est une grande salle pleine de machines lourdes assorties, vrombissant bruyamment. La pièce sent les résistances brûlées. Le long d'un mur se trouvent trois boutons qui sont respectivement ronds, triangulaires et carrés. Bien entendu, au dessus de ces boutons se trouvent des instructions écrites en EBCDIC...

Voir également

Les références

Liens externes