Extended Binary Coded Decimal Interchange Code
L’ (EBCDIC) est un mode de codage des caractères sur  créé par IBM à l'époque des cartes perforées. Il existe au moins  différentes bien documentées (et de nombreuses variantes parfois créées par des concurrents d’IBM), incompatibles entre elles. Ce mode de codage a été critiqué pour cette raison, mais aussi parce que certains caractères de ponctuation ne sont pas disponibles dans certaines versions. Ces disparités ont parfois été interprétées comme un moyen pour IBM de conserver ses clients captifs.

EBCDIC est encore utilisé dans les systèmes AS/400 d’IBM ainsi que sur les  sous MVS (aujourd'hui z/OS), VM ou DOS/VSE.

Historique 

La disposition apparemment « étrange » du codage EBCDIC est historique et provient des anciens lecteurs de bandes et cartes perforées, qui devaient pouvoir être lues et percées manuellement par un humain en utilisant le système décimal plus mnémotechnique (et il était lui-même dérivé de l’ancien jeu de caractère télégraphique sur ).

Les bits de poids fort sont apparus après et ont permis de coder dans une colonne supplémentaire de perforation les distinctions entre chiffres et lettres, ou entre minuscules et majuscules. Le jeu était conçu pour qu’à chaque caractère corresponde aussi au moins un trou, afin de permettre la synchronisation des lecteurs de bandes perforées, c’est pourquoi la  était à l’origine inutilisée pour les lettres, les chiffres ayant un trou dédié supplémentaire correspondant à un bit de poids fort.

Le jeu EBCDIC à l’origine était bien un jeu sur , le huitième étant alors uniquement utilisé sur les cartes perforées pour indiquer que la colonne de perforation était bien occupée par un caractère codé (c’est pourquoi les principaux codes EBCDIC occupent la seconde moitié de la table).

De même, les ponctuations étaient codées aussi de façon visuelle et mnémotechnique, et pouvaient facilement être distinguées des chiffres et lettres par le fait qu’elles n'avait aucun trou dans les positions binaires correspondant aux marques de chiffres ou de lettres.

L’absence de toute perforation dans une colonne de perforations était interprétée comme du bourrage non signifiant, lié à la technologie employée (ce code en début de table correspond aujourd’hui au caractère de contrôle C0 “NUL”). De même, on pouvait corriger une erreur manuelle de perforation en perforant toutes les positions d’une colonne, et donc la dernière position est aussi un caractère de bourrage non signifiant (ce code en fin de table correspond aujourd’hui au caractère de commande C1 “APC”, fonction plutôt dévolue au caractère de contrôle C0 “DEL” de l’ et de l’ASCII mais dont l’usage est plus ambigu).

L’EBCDIC est donc le fruit d’une évolution historique bien plus ancienne (développée de longue date par IBM en continuité avec les anciens systèmes télégraphiques) que l’ASCII (plus pratique à manipuler dans les programmes) qui l’a remplacé ensuite pratiquement partout et a donné ensuite lieu à une normalisation dans l’.

Les bandes et cartes perforées ont cependant continué à être utilisées avec l’EBCDIC jusque vers les , par exemple en Turquie pour les échanges de données militaires alors que les problèmes de compatibilité des systèmes d’enregistrement magnétiques ou des réseaux étaient encore loin d’être tous résolus.

Le succès des normes de communication entre systèmes hétérogènes (notamment TCP/IP et l’Internet, ainsi que les systèmes de cryptographie pour la transmission sécurisée et moins coûteuse via des réseaux publics) a mis fin à l’intérêt de l’EBCDIC pour tout nouveau développement, et les nombreuses versions nationales de l’EBCDIC ont également de moins en moins d’intérêt depuis l’apparition de l’UTF-EBCDIC.

Exemple de codage 
Ce tableau représente le codage d’une variante d’EBCDIC compatible avec l’ISO/CEI 8859-1. Les caractères codés de 0x00 à 0x3F ainsi que 0xFF sont des caractères de contrôle, 0x40 est l’espace, 0x41 est l’espace insécable. Le caractère codé en 0x54 est le tiret de césure visible uniquement en fin de ligne.

Cette variante est compatible, octet par octet, avec l’UTF-EBCDIC qui utilise les positions variantes colorées en vert pour coder les caractères Unicode (hors de l’ASCII et des codes de contrôle) sous forme de séquences d’octets.

Chaque variante nationale ou internationale de l’EBCDIC est codée d’après cette table (cependant des permutations sont possibles entre deux CCSID pour les mêmes caractères). Toutes les variantes de l’EBCDIC ne codent pas les lettres minuscules latines de base, au contraire des jeux de caractères basés sur l’ ou .

D’autre part certaines variantes nationales de l’ (ou autres jeux de caractères compatibles avec cette norme) contiennent des positions variantes supplémentaires, invariantes dans les jeux de caractères basés sur l’EBCDIC.

Enfin, les positions 0x5A et 0x7F de l’EBCDIC sont variantes — la plupart des variantes EBCDIC y codent respectivement le point d’exclamation et le guillemet anglais () — au contraire des caractères correspondants des variantes nationales de l’ aux positions respectives 0x21 et 0x22.

Sur les systèmes EBCDIC, le saut de ligne est normalement codé avec le caractère de contrôle C1 “NEL” (U+0085 en Unicode, ou 0x25 dans toutes les variantes standard EBCDIC) et non avec les caractères de contrôle C0 “CR” et/ou “LF” de l’ et de l’ASCII (U+000D et/ou U+000A, c’est-à-dire 0x0D et/ou 0x15 en EBCDIC, où ces commandes ont une fonction bien définie et unique de gestion de position du curseur sur un terminal, ou bien permettent de distinguer les sauts de lignes forcés dans un même paragraphe, ou encore permettaient d’afficher une ligne en surimpression pour produire des caractères gras, soulignés, ou accentués supplémentaires).

Transcodage de l’ISO 8859-1 vers l’EBCDIC 
La table suivante permet de transcoder l’ASCII (caractères Unicode U+0000 à U+007F) et le jeu de commandes C1 (caractères Unicode U+0080 à U+009F) en EBCDIC. Les caractères de l’extension  (en vert) sont indiqués ici dans l’ordre compatible avec l’UTF-EBCDIC, mais cette assignation ne correspond pas à une variante nationale particulière de l’EBCDIC.

Cette table est l’inverse de la table précédente et est compatible octet par octet avec la seconde phase (de permutation des valeurs d’octets) de l’UTF-EBCDIC.

Ensemble, ces deux tables permettent d’adapter facilement n’importe quel jeu de caractère compatible  ou  pour des traitements sur des systèmes EBCDIC standards. Par contre, pour adapter à une version précise d’un jeu EBCDIC (et faire reconnaître exactement les caractères non ASCII), il faudra substituer les positions marquées en vert dans les deux tables, en fonction de leur assignation réelle dans les variantes nationales de jeux EBCDIC correspondants, voire substituer les lettres minuscules latines remplacées dans certaines versions obsolètes de certains jeux EBCDIC (jeu EBCDIC japonais ou cyrillique, sauf les jeux EBCDIC russes qui unifient avec le même code EBCDIC certaines lettres cyrilliques et latines comme le A, d’apparences identiques dans les deux écritures).

Le détail des assignations de ces positions (marquées ici en vert dans les deux tables) dans les variantes nationales de l’EBCDIC est référencé sur le site IBM mentionné dans les liens externes. Notamment, la variante encore la plus utilisée est l’EBCDIC  (version internationale du jeu Latin  dont le jeu est très proche de celui de l’ISO 8859-1, mais avec quelques différences, et triée différemment des tables présentées ici).

Voir aussi

Articles connexes 
 EBCDIC-codepages avec Latin-1-charset
 EBCDIC-codepage 297 (France)
 UTF-EBCDIC

Liens externes 
 Tables EBCDIC sur le site IBM

Codage des données