Systèmes de codification




BoTTom

Binaire

La base même de l'informatique est la manipulation de données binaires, sur la base de bits

Le mot « bit » est la contraction des mots anglais binary digit, qui signifient « chiffre binaire », avec un jeu de mot sur bit, « petit morceau ».

Un bit ne peut prendre que deux valeurs. Selon le contexte, numérique, logique (voir algèbre de Boole), ou magnétique, on les appelle « zéro » et « un » ce qui équivaut respectivement à « faux » et « vrai », « ouvert » et « fermé », ...

 

Unités de bits
Ordre de
grandeur
Système
international
Unité Notation Valeur
1 bit bit 1 bit
103 kilobit kbit 103 bits
106 mégabit Mbit 106 bits
109 gigabit Gbit 109 bits
1012 térabit Tbit 1012 bits
1015 pétabit Pbit 1015 bits
1018 exabit Ebit 1018 bits
1021 zettabit Zbit 1021 bits
1024 yottabit Ybit 1024 bits

Abréviations usuelles

les bits sont regroupés par groupe de 8, nommés Byte, Octet en Français.

pour des raisons de lisibilité, on donne la représentation hexadécimale de la partie gauche (hors texte) et de la partie droite (digits)

sous la forme X'C1', suivant cette série de valeurs

Déc. héxa Binaire
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

le format numérique binaire ou BCD est basé sur cette table :

Pour les caractères, revenons sur la base de la codification qui est, à l'origine, la carte perforée (voir les cartes pour le Métier Jacquard)

Les cartes perforées IBM utilisaient le code Hollerith; ce code allait de 0 à 9 pour les codes numériques et des perforations hors texte 12, 11, 0. Le code hors texte servait avec les combinaisons des perforations numériques à représenter les codes alphabétiques. Ainsi le A était représenté par les perforations 12 et1 dans la la même colonne, le B 12 et 2, le C 12 et 3, le J 11 et 1, le R 11 et 9, le S 0 et 1, le Z 0 et 8.

Ces cartes étaient stockées par boîtes de 2 000, et le coin tronqué servait de repère pour les insérer dans le bon sens dans un chargeur de cartes ou pour les remettre à l'endroit quand la boîte tombait par terre.

Ce fut une étape notable dans la définition du codage de caractères (BCD, EBCDIC ou ASCII).

En 1960, IBM, Univac, Burrough, Honeywell et d'autres, se sont regroupés en consortium pour définir un standard commun


1963 : naissance de l'Extended Binary Coded Decimal Interchange Code ( EBCDIC) sur 8-bit.

Chaque caractère est noté sur deux caractères hexadécimaux X'C1' représentant un caractère (ici le A en notation EBCDIC)

Grille de codification

Jeu de caractères EBCDIC
Quartet
haut
Quartet bas
...0 ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...A ...B ...C ...D ...E ...F
0... NUL
0000
SOH
0001
STX
0002
ETX
0003
ST
009C
HT
0009
SSA
0086
DEL
007F
EPA
0097
RI
008D
SS2
008E
VT
000B
FF
000C
CR
000D
SO
000E
SI
000F
1... DLE
0010
DC1
0011
DC2
0012
DC3
0013
OSC
009D
LF
000A
BS
0008
ESA
0087
CAN
0018
EM
0019
PU2
0092
SS3
008F
FS
001C
GS
001D
RS
001E
US
001F
2... PAD
0080
HOP
0081
BPH
0082
NBH
0083
IND
0084
NEL
0085
ETB
0017
ESC
001B
HTS
0088
HTJ
0089
VTS
008A
PLD
008B
PLU
008C
ENQ
0005
ACK
0006
BEL
0007
3... DCS
0090
PU1
0091
SYN
0016
STS
0093
CCH
0094
MW
0095
SPA
0096
EOT
0004
SOS
0098
SGCI
0099
SCI
009A
CSI
009B
DC4
0014
NAK
0015
PM
009E
SUB
001A
4... SP
0020
NBSP
00A0
¡
00A1
¢
00A2
£
00A3
¤
00A4
¥
00A5
¦
00A6
§
00A7
¨
00A8
©
00A9
.
002E
<
003C
(
0028
+
002B
|
007C
5... &
0026
ª
00AA
«
00AB
¬
00AC
SHY
00AD
®
00AE
¯
00AF
°
00B0
±
00B1
²
00B2
!
0021
$
0024
*
002A
)
0029
;
003B
^
005E
6... -
002D
/
002F
³
00B3
´
00B4
µ
00B5

00B6
·
00B7
¸
00B8
¹
00B9
º
00BA
»
00BB
,
002C
%
0025
_
005F
>
003E
?
003F
7... ¼
00BC
½
00BD
¾
00BE
¿
00BF
À
00C0
Á
00C1
Â
00C2
Ã
00C3
Ä
00C4
`
0060
:
003A
#
0023
@
0040
'
0027
=
003D
"
0022
8... Å
00C5
a
0061
b
0062
c
0063
d
0064
e
0065
f
0066
g
0067
h
0068
i
0069
Æ
00C6
Ç
00C7
È
00C8
É
00C9
Ê
00CA
Ë
00CB
9... Ì
00CC
j
006A
k
006B
l
006C
m
006D
n
006E
o
006F
p
0070
q
0071
r
0072
Í
00CD
Î
00CE
Ï
00CF
Ð
00D0
Ñ
00D1
Ò
00D2
A... Ó
00D3
~
007E
s
0073
t
0074
u
0075
v
0076
w
0077
x
0078
y
0079
z
007A
Ô
00D4
Õ
00D5
Ö
00D6
[
005B
×
00D7
Ø
00D8
B... Ù
00D9
Ú
00DA
Û
00DB
Ü
00DC
Ý
00DD
Þ
00DE
ß
00DF
à
00E0
á
00E1
â
00E2
ã
00E3
ä
00E4
å
00E5
]
005D
æ
00E6
ç
00E7
C... {
007B
A
0041
B
0042
C
0043
D
0044
E
0045
F
0046
G
0047
H
0048
I
0049
è
00E8
é
00E9
ê
00EA
ë
00EB
ì
00EC
í
00ED
D... }
007D
J
004A
K
004B
L
004C
M
004D
N
004E
O
004F
P
0050
Q
0051
R
0052
î
00EE
ï
00EF
ð
00F0
ñ
00F1
ò
00F2
ó
00F3
E... \
005C
ô
00F4
S
0053
T
0054
U
0055
V
0056
W
0057
X
0058
Y
0059
Z
005A
õ
00F5
ö
00F6
÷
00F7
ø
00F8
ù
00F9
ú
00FA
F... 0
0030
1
0031
2
0032
3
0033
4
0034
5
0035
6
0036
7
0037
8
0038
9
0039
û
00FB
ü
00FC
ý
00FD
þ
00FE
ÿ
00FF
APC
009F

La grille de codification varie d'un pays à l'autre, même si elle contient des caractères invariants

Page de code 297 (variante de l’EBCDIC pour la France)
Quartet
haut
Quartet bas
...0 ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...A ...B ...C ...D ...E ...F
0... NUL
0000
SOH
0001
STX
0002
ETX
0003
ST
009C
HT
0009
SSA
0086
DEL
007F
EPA
0097
RI
008D
SS2
008E
VT
000B
FF
000C
CR
000D
SO
000E
SI
000F
1... DLE
0010
DC1
0011
DC2
0012
DC3
0013
OSC
009D
LF
000A
BS
0008
ESA
0087
CAN
0018
EM
0019
PU2
0092
SS3
008F
FS
001C
GS
001D
RS
001E
US
001F
2... PAD
0080
HOP
0081
BPH
0082
NBH
0083
IND
0084
NEL
0085
ETB
0017
ESC
001B
HTS
0088
HTJ
0089
VTS
008A
PLD
008B
PLU
008C
ENQ
0005
ACK
0006
BEL
0007
3... DCS
0090
PU1
0091
SYN
0016
STS
0093
CCH
0094
MW
0095
SPA
0096
EOT
0004
SOS
0098
SGCI
0099
SCI
009A
CSI
009B
DC4
0014
NAK
0015
PM
009E
SUB
001A
4... SP
0020
NBSP
00A0
â
00E2
ä
00E4
@
0040
á
00E1
ã
00E3
å
00E5
\
005C
ñ
00F1
°
00B0
.
002E
<
003C
(
0028
+
002B
!
0021
5... &
0026
{
007B
ê
00EA
ë
00EB
}
007D
í
00ED
î
00EE
ï
00EF
ì
00EC
ß
00DF
§
00A7
$
0024
*
002A
)
0029
;
003B
^
005B
6... -
002D
/
002F
Â
00C2
Ä
00C4
À
00C0
Á
00C1
Ã
00C3
Å
00C5
Ç
00C7
Ñ
00D1
ù
00F9
,
002C
%
0025
_
005F
>
003E
?
003F
7... ø
00F8
É
00C9
Ê
00CA
Ë
00CB
È
00C8
Í
00CD
Î
00CE
Ï
00CF
Ì
00CC
µ
00B5
:
003A
£
00A3
à
00E0
'
0027
=
003D
"
0022
8... Ø
00D8
a
0061
b
0062
c
0063
d
0064
e
0065
f
0066
g
0067
h
0068
i
0069
«
00AB
»
00BB
ð
00F0
ý
00FD
þ
00FE
±
00B1
9... [
005B
j
006A
k
006B
l
006C
m
006D
n
006E
o
006F
p
0070
q
0071
r
0072
ª
00AA
º
00BA
æ
00E6
¸
00B8
Æ
00C6
¤
00A4
A... `
0060
¨
00A8
s
0073
t
0074
u
0075
v
0076
w
0077
x
0078
y
0079
z
007A
¡
00A1
¿
00BF
Ð
00D0
Ý
00DD
Þ
00DE
®
00AE
B... ¢
00A2
#
0023
¥
00A5
·
00B7
©
00A9
]
005D

00B6
¼
00BC
½
00BD
¾
00BE
¬
00AC
|
007C
¯
00AF
~
007E
´
00B4
×
00D7
C... é
00E9
A
0041
B
0042
C
0043
D
0044
E
0045
F
0046
G
0047
H
0048
I
0049
SHY
00AD
ô
00F4
ö
00F6
ò
00F2
ó
00F3
õ
00F5
D... è
00E8
J
004A
K
004B
L
004C
M
004D
N
004E
O
004F
P
0050
Q
0051
R
0052
¹
00B9
û
00FB
ü
00FC
¦
00A6
ú
00FA
ÿ
00FF
E... ç
00E7
÷
00F7
S
0053
T
0054
U
0055
V
0056
W
0057
X
0058
Y
0059
Z
005A
²
00B2
Ô
00D4
Ö
00D6
Ò
00D2
Ó
00D3
Õ
00D5
F... 0
0030
1
0031
2
0032
3
0033
4
0034
5
0035
6
0036
7
0037
8
0038
9
0039
³
00B3
Û
00DB
Ü
00DC
Ù
00D9
Ú
00DA
APC
009F

 

Parallèlement les autres système utilisent un système de codification différent : ASCII (American Standard Code for Information Interchange )


On peut aussi présenter la table des caractères ASCII sous cette forme condensée

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
000
NUL
SOH
STX
ETX
EOT
ENQ
ACK
VT
FF
SO
SI
001
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
FS
GS
RS
US
002
003
004
005
006
007


Il arrive souvent d'utiliser les codes de 128 à 255 pour les accents, mais comme dans l'EBCDIC, ces codes sont différents d'un pays à l'autre !

Pas pratique pour échanger des documents.

Il faut donc trouver un code plus pratique, plus universel. Il existe: c'est l'UNICODE.


Le standard Unicode est constitué d'un répertoire de plus de 110 000 caractères couvrant 100 écritures, d'un ensemble de tableaux de codes pour référence visuelle (braille), d'une méthode de codage et de plusieurs codages de caractères standard, d'une énumération des propriétés de caractère (lettres majuscules, minuscules, symboles, ponctuation, etc.) d'un ensemble de fichiers de référence des données informatiques, et d'un certain nombre d'éléments liés, tels que des règles de normalisation, de décomposition, de tri, de rendu et d'ordre d'affichage bidirectionnel (pour l'affichage correct de texte contenant à la fois des caractères d'écritures droite à gauche, comme l'arabe et l'hébreu, et de gauche à droite).

En pratique, Unicode reprend intégralement la norme ISO/CEI 10646, puisque cette dernière ne normalise que les caractères individuels en leur assignant un nom et un numéro normatif (appelé point de code) et une description informative très limitée.



Voici une toute petite partie des tables UNICODE (les nombres sont présentés en notation hexadécimal):

(GIF 21 ko) (GIF 22 ko) (GIF 21 ko) (GIF 20 ko)
Caractères Unicode
0000 à 007F (0 à 127)
(caractères latins)
Caractères Unicode
0080 à 00FF (128 à 255)
(caractères latins, dont accentués)
Caractères Unicode
0900 à 097F (2304 à 2431)
(caractères devanagari/sanskrit)
Caractères Unicode
1100 à 117F (4352 à 4479)
(caractères hangul jamo/coréen)

Vous pourrez trouver plus d'informations sur l'UNICODE sur http://www.unicode.org.

Dans la table des caractères Unicode on ajoute  un index numérique associé à chaque caractère. Notons bien qu’il ne s’agit pas d’une représentation en mémoire, juste d’un nombre entier, appelé point de code. L'espace de codage de ces nombres est divisé en 17 zones de 65 536 points de codes. Ces zones sont appelées plans.
Le point de code est noté U+xxxx où xxxx est en hexadécimal, et comporte 4 à 6 chiffres :

Ainsi, le caractère nommé « Lettre majuscule latine c cédille » a un index de U+00C7.
Il appartient au premier plan.

En principe toutes les positions de code entre U+0000 et U+10FFFF sont disponibles, mais certains intervalles sont perpétuellement réservés à des usages particuliers, notamment une zone d'indirection exclue pour permettre le codage UTF-16 (cf. ci-dessous), les zones à usage privé et quelques régions (par exemple U+FFFE ou U+FFFF) contenant des non-caractères dont l'usage est interdit dans un échange de données conforme. Les autres positions de code sont soit déjà assignées à des caractères, soit réservées pour normalisation future.

Unicode 6 a 7 catégories de caractères:

 UTF-8

Techniquement, il s’agit de coder les caractères Unicode sous forme de séquences de un à quatre codets d’un octet chacun. La norme Unicode définit entre autres un ensemble (ou répertoire) de caractères. Chaque caractère est repéré dans cet ensemble par un index entier aussi appelé « point de code ». Par exemple le caractère « € » (euro) est le 8365e caractère du répertoire Unicode, son index, ou point de code, est donc 8364 (on commence à compter à partir de 0).
Le répertoire Unicode peut contenir plus d’un million de caractères, ce qui est bien trop grand pour être codé par un seul octet (limité à des valeurs entre 0 et 255). La norme Unicode définit donc des méthodes standardisées pour coder et stocker cet index sous forme de séquence d’octets : UTF-8 est l'une d’entre elles, avec UTF-16, UTF-32 et leurs différentes variantes.
La principale caractéristique d’UTF-8 est qu’elle est rétro-compatible avec la norme ASCII, c’est-à-dire que tout caractère ASCII se code en UTF-8 sous forme d’un unique octet, identique au code ASCII. Par exemple « A » (A majuscule) a pour code ASCII 65 et se code en UTF-8 par l'octet 65. Chaque caractère dont le point de code est supérieur à 127 (caractère non ASCII) se code sur 2 à 4 octets. Le caractère « € » (euro) se code par exemple sur 3 octets : 226, 130, et 172.

 

UTF-16

L’UTF-16 est un bon compromis lorsque la place mémoire n’est pas trop restreinte, car la grande majorité des caractères Unicode assignés pour les écritures des langues modernes (dont les caractères les plus fréquemment utilisés) le sont dans le plan multilingue de base et peuvent donc être représentés sur 16 bits.


Codage UTF-16

hi \ lo

DC00

DC01

   …   

DFFF

D800

10000

10001

103FF

D801

10400

10401

107FF

  :

/

/

...

/

DBFF

10FC00

10FC01

10FFFF

Les points de code des seize plans supplémentaires nécessitent une transformation sur deux mots de 16 bits :

En résumé, il y a 2 plages réservées :
Haute : X'D800' – X'DBFF' = 4 * 256 combinaisons
Basse : X'DC00' – X'DFFF' = 4 * 256 combinaisons
soit 1024 * 1024 caractères supplémentaires


codage sur 2 octets pour les 63488 premiers caractères (comme UCS-2 ci-dessous)
codage sur 4 octets pour les autres caractères (subrogate characters)


UCS-2 est la version simplifié de UTF-16 ne prévoyant pas les indirections et ne permet donc que de stocker des caractères appartenant au premier plan.(obsolète aujourd’hui)


UTF-32

L’UTF-32 est utilisé lorsque la place mémoire n’est pas un problème et que l’on a besoin d’avoir accès à des caractères de manière directe et sans changement de taille (hiéroglyphes).

 

Sur IBM i , les différentes versions Unicode sont représentées par un code page

UCS-2                        ->        CCSID(13488)
UTF-8                         ->        CCSID(1208)
UTF-16                       ->        CCSID(1200)
UTF-32                       ->        (non implémentée)    

Il faut parallèlement avoir installé la bibliothèque ICU (option 39 du système)

Voir http://unicodebook.readthedocs.org/en/latest/unicode_encodings.html


Formats numériques

sur 1 octet compris entre 0 et 255 (x'FF)
sur 2 octets compris entre 0 et 65535 (x'FFFF')
sur 4 octets compris entre 0 et 4294967295

Il s'agit précisément du binaire non signé, pour pouvoir représenter la notion de signe (+/-) le bit le plus à gauche est utilisé

0 ce chiffre est positif -> maxi x'7FFF' (0111111) soit 32767

1 ce chiffre est négatif, il faut faire un complément à 2 pour avoir la valeur -> mini X'8000' soit -32768

Au début on a utilisé le complément à 1 (inversion de bits) mais cela générait +0 (X'0000') et -0(X'FFFF)

La technique du complément à 2, consiste à réaliser un complément à un de la valeur puis d'ajouter 1 au résultat.

Par exemple pour obtenir –1 (X'FFFF') :

00000001 codage de 1 en binaire
11111110 complément à un
11111111 on ajoute 1

Par exemple pour calculer x'8001' (-32766)

10000010 codage en binaire
10000001 on retranche 1
01111110 complément à un = 32766

 


Les calculs en virgule flottante sont pratiques, mais présentent divers désagréments, notamment :

Ce qui est fait que ce format est peu utilisé dans le monde de la gestion, sur gros systèmes IBM.

Format numérique à position de virgule fixe, proche de la représentation caractère EBCDIC, la partie Hors texte du dernier octet indique le signe

F1F2F3F7 = 1237

F1F2F3D7 = -1237

F1F2F3C7 = +1237

le COBOL gros systèmes reconnaissait le + numérique et le "neutre", sur IBM i (AS/400), seul existe 1237 qui vaut +1237 et -1237

Format numérique proche du numérique étendu (virgule fixe), mais on cherche à optimiser le stockage, pour cela les parties gauche (hors-texte) de chaque octet est abandonnée, sauf le derneir indiquant le signe qui est placé à droite :

1237F = 1237

1237D = -1237


C'est le format par défaut de DB2 (DEC ou décimal) et du compilateur RPG sur IBM i.

Top


Copyright © ,2015 VOLUBIS