-
Notifications
You must be signed in to change notification settings - Fork 16
/
unicode.format.txt
191 lines (178 loc) · 12.7 KB
/
unicode.format.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
UNICODE
ISO 10 646 #L'ISO 10 646 définit depuis le début des années 90 un
ET UCS ==> #UCS (Universal Character Set), c'est-à-dire un
#ensemble de caractères (l'ambition étant tous les
#caractères du monde) associés chacun à nombre, appelé
#codepoint, et à un nom (en français et en anglais),
#ainsi qu'à des propriétés (par exemple l'appartenance
#à la catégorie de chiffre décimal, etc.)
#Beaucoup de points de code sont laissés délibérément
#vides.
#L'ISO 10 646 définit aussi UCS-2, UCS-4, UTF-8, UTF-16
#et UTF-32
UNICODE ET DIFFERENCE #Unicode utilise depuis 1991 l'UCS et ajoute :
AVEC ISO 10 646 ==> # - le fait que les caractères U+200E et U+200F
# permettent d'indiquer que le caractères de
# ponctuation proche est à lire, respectivement, de
# gauche à droite, ou de droite à gauche. Il n'est
# utilisé que pour spécifié ceci pour un caractère,
# le fait de le spécifier pour l'ensemble du texte
# n'est pas géré par Unicode mais par le logiciel.
# - l'utilisation de symboles diacritiques (accents)
# isolés, précédés de n'importe quel caractère, pour
# indiquer la combinaison des deux. Même chose pour
# l'utilisation de symboles utilisés pour faire des
# ligatures
# - et autres.
#Dans tous les cas, ces caractères existent dans UCS
#mais n'ont pas de sens normatif (de sens de lecture,
#de ligature, etc.) comme en Unicode
LES 17 PLANS ET #Les codepoints sont notés U+XXXX (pour le PMB) et
LE BMP ==> #U+XXXXX ou U+XXXXXX (pour le reste) en hexadécimal
#Ils vont de U+0000 à U+10FFFF (soit 1,1 millions en
#décimal)
#Ils sont divisés en 17 plans :
# - le plan 0, de U+0000 à U+FFFF
# - le plan 1, de U+10000 à U+1FFFF
# - etc.
#
# - Le plan 0 est le BMP. Il désigne donc les points
# de code de U+0000 à U+FFFF.
# Il comprend la grande majorité des scripts
# utilisés dans le monde :
# - U+0000 à U+007F contient ASCII
# - U+0080 à U+00FF contient Latin-1 (deuxième partie)
# - U+0100 à U+017F contient des caractères accentués
# rares avec l'alphabet latin
# - U+0180 à U+052F est pour l'Europe centrale,
# l'alphabet cyrillique, l'alphabet phonétique et
# les accents isolés (diacritique)
# - U+0530 à U+1CFF est pour des langues exotiques
# - U+1D00 à U+1FFF est un supplément à l'Europe
# centrale, cyrillique, alphabet phonétique, au
# latin et au grec
# - U+2000 à U+2BFF contient de la ponctuation rare,
# des symboles mathématiques et des symboles (dont
# une partie de Windows-1251, et les symboles
# graphiques représentant les control characters
# dans CP850)
# - U+2C00 à U+2EFF contient des alphabets rares
# - U+2E00 à U+A4FF contient des symboles chinois,
# japonais et coréens (CJC)
# - U+A500 à U+D7FF contient des alphabets rares
# - U+D800 à U+DFFF contient les surrogates codes
# points
# - U+E000 à U+F8FF contient les private-use code
# points
# - U+F900 à U+FFEF contient des symboles arabes et
# CJC, ainsi que le BOM (U+FFFE) utilisé pour
# marqué l'endianness d'un texte
# - U+FFF0 à U+FFFF contient des symboles de contrôle
# de format, plus le symbole affiché lorsque le
# symbole recherché n'est pas trouvé ou est illégal
# (U+FFFD)
# - le plan 1 contient des symboles anciens, ainsi que
# (de U+1D400 à U+1D3FF) des symboles mathématiques
# - le plan 2 contient des symboles CJC
# - les plans 3 à 13 ne sont pas utilisés
# - le plan 14 contient des tags (indiquant la langue
# ou le format)
# - les plans 15 et 16 ne contiennent que des private-
# use code points
BLOCKS ==> #Les plans sont découpés en blocks de taille variables.
SCRIPTS ==> #Un script est un ensemble de caractères partagés par
#plusieurs langages (un alphabet comprenant plusieurs
#alphabets similaires). Il comprend en général
#plusieurs blocks, par nécessairement contigus
#90 scripts sont actuellement couverts
TYPES DE CODE #Il existe six sortes de code points :
POINTS ==> # - Les code points U+D800 à U+DBFF sont les high (ou
# leading)-surrogate code points, et de U+DC00 à U+
# DFFF sont les low (ou trailing)-surrogate code
# points. Ils réservés pour faire référence à un
# autre plan que le BMP, dans l'UTF-16
# - Les noncharacters sont des code points réservés
# pour des usages autre que celui de caractères :
# c'est la plage U+FDD0 à U+FDEF, ainsi que les deux
# derniers codes points de chaque plan (finissant
# donc par FFFE ou FFFF)
# - Les private-use code points sont laissés aux
# entreprises qui veulent les définir (exemple :
# logo d'Apple). Ils sont dans la plage U+E000 à U+
# F8FF, et dans les plans 15 et 16. Ils sont peu
# interopérable
# - les format characters n'ont pas de représentation
# graphiques, mais un effet sur les caractères
# environnement (par exemple ajouter une ligature)
# - les code characters sont les mêmes que ceux de
# ASCII (U+0000 à U+001F) et Latin-1 (U+007F à U+
# 009F)
# - les graphic caractères sont des caractères
# s'affichant à l'écran ou affichant un espace (par
# exemple les lettres, les chiffres, ...). 100 000
# sont couverts actuellement
# - les reserved code points sont les code points non
# encore assignés
L'ENCODAGE ==> #UCS et Unicode ne sont pas un encodage en eux-mêmes,
#mais les code points sont utilisés par des encodages,
#comme UTF-8, UCS-2, UTF-16, UTF-32 (UCS-4) ou CESU-8
#Ne pas confondre la table UCS et l'encodage UCS-2 ou
#UCS-4
PUNNYCODE ==> #Le Punycode est une manière de noter, avec plusieurs
#caractères ASCII, un caractère Unicode dans une URL
DIGRAPHES ET #Certains caractères Unicode peuvent être représentés
TRIGRAPHES ==> #par un digraphe, c'est-à-dire deux caractères qui,
#ensemble, représentent ce caractère. Les digraphes
#Unicode sont repertoriés dans la RFC 1345. Il y a
#aussi quelques trigraphes.
ENTRER UN CARACTERE #Un caractère Unicode peut être entré en input :
UNICODE ==> # - en entrant plusieurs chiffres hexadécimaux à la
# suite (par exemple $'\xNN\xNN')
# - Dans plusieurs langages de programmation (dont C++), en
# utilisant \uXXXX pour la BMP, \UXXXXXXXX en dehors
# (ou \uXXXX\uXXXX en Java)
# - En html (et xml), on peut utiliser les html (ou
# xml) entities : &#DECIMAL; ou &#xHEXA;
#Les autres solutions suivantes impriment le caractère
#tel quel, contrairement aux solutions précédentes qui
#n'utilisent que de l'ASCII, ce qui est plus portable.
#Même si le caractère ne peut pas être affiché (problème
#de police, d'affichage, ...), il est bien là :
# - sous Linux, avec GTK2+ (notamment gnome-terminal)
# en tapant CTRL-SHIFT-U
# puis une séquence de 1 à 8 chiffres hexaٰ-
# - grâce à une table de caractères visuelle,
# généralement provided par les OS
# - sous Vim, taper CTRL-V, puis u puis un code hexa
# de quatre chiffres
# - sous Vim, taper CTRL-K puis un digraphe ou
# trigraphe
# - sous Windows si la clef HKCU\Control Panel\Input
# Method\EnableHexNumpad est à "1", maintenir ALT
# et + et taper le code hexa avec le num pad. Si la
# clef est à "0" (plupart des cas), taper le code en
# décimal, et ne marchera pas toujours
MANIPULATION ET OUTPUT #Même si le caractère est bien présent dans le code, son
D'UN CARACTERE #affichage peut poser problème si :
UNICODE ==> # - la police courante ne supporte pas ce caractère
# - l'affichage courant ne supporte pas cet encodage
#Dans tous les cas, seul l'affichage est affecté, non
#le traitement du caractère lui-même. Par contre son
#traitement est incorrect si :
# - le caractère est invalide
# - la commande ne permet pas de gérer les caractères
# Unicode. C'est souvent le cas lorsque la commande
# n'a pas une exécution multi-octets (par exemple
# "echo đ | tr đ o" renverra "oo"). Cependant :
# - Même uni-octet, cela peut ne pas affecter son
# processus d'utilier un caractère multi-octet.
# Par exemple grep cherchera le premier octet,
# puis le second, ce qui revient à rechercher les
# deux en même temps
CARACTERES UNICODE #Un caractère invalide ou ne pouvant pas être affiché
INVALIDES OU NON #(problème de police par exemple) sera non traité,
IMPRIMABLES ==> #remplacé par � ? ¿ ou un rectangle affichant son
#codepoint Unicode, ou affiché comme s'il faisait
#partie d'un autre charset.