Encodage de caractères
Cet article est une ébauche à compléter. Une ébauche est une entrée ayant un contenu (très) maigre et qui a donc besoin d'un auteur.
Definition
Un codage de caractères est un code qui associe un jeu de caractères d'une langue naturelle (comme un alphabet ou un syllabaire) avec un jeu de quelque chose d'autres, comme par exemple des nombres ou des signaux électriques. Par exemple, le code Morse (qui associe l'alphabet latin à une série de pressions longues et de pressions courtes sur le manipulateur Morse du télégraphe) et le code ASCII (qui code les lettres, les chiffres et d'autres symboles comme des entiers codés sur 7 bits) sont des codages de caractères. (Wikipedia, retrieved 26 mars 2007 à 20:38 (MEST))
Voir aussi Codec (Encoding/decoding of compression formats that for simple files, archive files or files with multiple contents (e.g. in en:multimedia container formats).
Une petite intro
(à refaire un jour ....)
Le problème des caractères n'est loin d'être résolu, au contraire en fait. Le monde est en train de migrer de jeux ISO-latin (langages européennes) vers UTF-8 (une variante Unicode permettant d'encoder la plupart des langues et ASCII compatible) et on a donc on a problème d'encodage comme il y a qqs années lorsqu'on migrait de ASCII vers ISO, et cela peut devenir cauchemardesque. D'autant plus que Windows ajoute qqs. complications.
Encodage d'un contenu de document
Voici deux exemples:
Encodage pour les "blancs": normalement pas de problème si on laisse le caractère "tel quel". Pour représenter par exemple un blanc on a:
- l'encodage ISO latin 1 (ISO 8859-1): 32 en décimal et %20 en hexadecimal
- en UTF-8 c'est pareil: 0020 (c.a.d dire le caractère se trouve dans la position 32).
Mais pour compliquer les choses, il existe un certain nombre d'autres blancs (thin, non-breaking etc.).
Par contre pour les accents (tous les caractères au delà de la position 127) c'est une autre histoire: Par exemple le à donne:
- en ISO-Latin: 224 (decimal) E0 (hexadecimal),
- en UTF-8: 00E0
Donc au meme endroit mais pas encodé totalement de la même façon. De ISO vers UTF-8 cela peut marcher, mais pas dans l'autre sens et il y a bien sûr des problèmes avec des variantes iso-latin (skandinave, windows, etc etc.). Un jeu ISO ne comprend jamais toute la gamme des caractères accentués (et donc un même code signifie parfois autre chose dans un autre jeu)
Au dela de ces qqs. dizaines de caractères européens iso-latin-1 il n'y a plus aucune compatibilité entre les anciens codes à 1 byte et les nouvelles normes Unicode à plusieurs bytes.
Les entites HTML et références de caractères HTML
On peut utiliser des entités ou références de caractères HTML (marche avec tous les navigateurs modernes), mais cela rend le texte difficilement lisible dans un éditeur qui ne fait pas la traduction dans l'autre sens. Donc la tendance est plutot indiquer l'encodage au début du fichier.
- Exemples d'entités et de références de caractères
- Le blanc: (pas d'entité) (référence de caractère)
- Le à: à (entité) à (référence de caractère)
Ces encodages &#n; sont implémentés dans tous les navigateurs modernes.
Par contre, si on veut taper les caractères "tel quel", il faut toujours éditer le fichier avec le même encodage: Donc soit en ISO-latinXXX, soit en UTF-8. Le trend va vers UTF-8 (car on peut mélanger toutes les langues dans une page, sans devoir taper les entités HTML ...).
Par ex: vous tapez "àé" en mode UTF-8, cela vous donne "à é" en mode ISO et dans un navigateur vous verrez des rectangles blancs ou des "?".
Il faut donc s'assurer à ce que le jeux de caractères soit clairement indiqué au début du fichier HTML. Par exemple en HTML:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1;"> <meta http-equiv="Content-type" content="text/html; charset=UTF-8;" />
En XHTML il faut aussi déclarer l'encodage dans l'entête XML.
Pour compliquer les choses, Windows fait une extension de ISO-Latin1: WinLatin1 alias windows-1252. (problèmes surtout avec les simple quet double guillemets qui se manifestent qu'on vous passez de Word à un autre éditeur car certains logiciels qui tournent sous Windows adoptent plutot ISO-latin simple. Même type de problème pour le jeu de Apple MacRoman.).
Les URLs compliquent les choses (!)
La spécification des URLS interdit l'usage des blancs (pour plusieurs raisons). Donc normalement on DOIT utiliser l'encodage hexadecimal ISO latin dans un URL.
Mon fichier.htm
devient:
Mon%20fichier.htm
En principe il faudrait aussi appliquer ce principe pour tous les caractères accentués:
http://edutechwiki.unige.ch/fr/Encodage_de_caractères
devient:
http://edutechwiki.unige.ch/fr/Encodage_de_caract%E8res
Dans le wiki on voit:
http://edutechwiki.unige.ch/fr/Encodage_de_caract%C3%A8res
Maintenant, certains logiciels ont de la peine à traduire un caractère blanc dans un lien vers la SEULE solution correcte (%20). Pour les autres caractères: si vos noms de fichiers dans le texte sont en UTF-8 et sur le serveur en ISO-latin voir Windows cela peut aussi poser problème.
Et c'est pour cela qu'on déconseille normalement d'utiliser des blancs pour des fichiers et leurs liens.
Conclusion
Utiliser des caractères sur Internet reste un cauchemar et je ne peux conseiller que 2 choses pour vous simplifier la vie:
- Toujours vérifier ce que votre éditeur sait éditer comme code (et tjrs utiliser le même, je conseille UTF-8)
- Pas de blancs ni de caractères accentués pour les noms de fichiers et URLs.
Liens
Spécifications
(some)
- UniCode Home Page (includes for example code-charts and the Unicode and the Web FAQ)
- Character Model for the World Wide Web 1.0: Fundamentals (W3C Recommendation 2005).
- Unicode in XML and other Markup Languages (W3C Technical Report)
- W3C I18N GEO Working Group
Tables
- Unicode 4.1.0 Chart
- Unicode Character Code Charts (PDF files)
- HTML
- HTM entities table
- Character Converter(Iain Tucker)
- ISO8859-1 (Latin-1) (HEX/Dec/Entities)
- iso8859-1 Table
- Table of character entity references in HTML 4
- ASCII - ISO 8859-1 (Latin-1)Table with HTML Entity Names
- The ISO 8859 Alphabet Soup
Convertisseurs en ligne
- [http://www.haypocalc.com/prog/encodage.php Encodage
- Text to UTF-8 or HTML Entities Tool
- Unicode (UTF-8) to HTML entity online converter
- UTF Converter
- Converter for funny characters into the proper HTML
Tutorials
- En français
- Comprendre les jeux de caractères
- Le minimum absolu que tout développeur doit absolument, positivement savoir sur Unicode et les jeux de caractères (aucune excuse !)
- Introduction aux jeux de caractères
- Foire Aux Questions des Tuteurs : Unicode, UTF-8
- En Anglais
- Characters and encodings by Jukka "Yucca" Korpela, very good reading ! See e.g. A tutorial on character code issues and On the use of some MS Windows characters in HTML
- HTML and Browsers Character encoding, entity references and UTF-8. Good short tutorial.
- Articles Wikipedia
URL encoding
- URL Encoding (or what are those " " codes in URLs?') by Brian Wilson