« Encodage de caractères » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
(corrections orthographiques et stylistiques sur toute la page)
 
Ligne 3 : Ligne 3 :
== Definition ==
== 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. ([http://fr.wikipedia.org/wiki/Codage_de_caract%C3%A8res Wikipedia],  retrieved 26 mars 2007 à 20:38 (MEST))
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 d'autre chose, 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. ([http://fr.wikipedia.org/wiki/Codage_de_caract%C3%A8res Wikipedia],  retrieved 26 mars 2007 à 20:38 (MEST))




Ligne 11 : Ligne 11 :
(à refaire un jour ....)
(à 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.
Le problème des caractères est loin d'être résolu, au contraire en fait. Le monde est en train de migrer des 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 un problème d'encodage comme il y a quelques années lorsqu'on migrait de ASCII vers ISO, et cela peut devenir cauchemardesque. D'autant plus que Windows ajoute encore à cela des complications.


=== Encodage d'un contenu de document ===
=== Encodage d'un contenu de document ===
Ligne 20 : Ligne 20 :
Pour représenter par exemple un blanc on a:
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  
* 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).
* en UTF-8 c'est pareil: 0020 (c.-à-d. : 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.).
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 contre, pour les accents (tous les caractères au delà de la position 127), c'est une autre histoire:  
Par exemple le à donne:
Par exemple le "à" donne:
* en ISO-Latin: 224 (decimal)  E0 (hexadecimal),  
* en ISO-Latin: 224 (decimal)  E0 (hexadecimal),  
* en UTF-8: 00E0
* 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)
Donc au meme endroit mais pas encodé totalement de la même façon. De ISO vers UTF-8 cela peut marcher, mais ce n'est pas le cas dans l'autre sens et il y a bien sûr des problèmes avec les variantes iso-latin (skandinave, windows, etc etc.). Un jeu ISO ne comprend jamais toute la gamme de 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.
Au dela de ces quelques 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 ===
=== Les entités 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.
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 plutôt d'indiquer l'encodage au début du fichier.


;Exemples d'entités et de références de caractères
;Exemples d'entités et de références de caractères
Ligne 46 : Ligne 46 :
Ces encodages &#n; (références de caractères) sont implémentés dans tous les navigateurs modernes.
Ces encodages &#n; (références de caractères) 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 des entités HTML ...).
Par contre, si on veut taper les caractères "tels quels", il faut toujours éditer le fichier avec le même encodage: Donc soit en ISO-latinXXX, soit en UTF-8. La tendance va vers UTF-8 (car on peut mélanger toutes les langues dans une page, sans devoir taper des 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 "?" si votre page "tourne" en ISO-latin.
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 "?" si votre page "tourne" en ISO-latin.


Il faut donc s'assurer à ce que le jeux de caractères soit clairement indiqué au début du fichier HTML.
Il faut donc s'assurer à ce que le jeu de caractères soit clairement indiqué au début du fichier HTML.
Par exemple en 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=iso-8859-1;">
Ligne 58 : Ligne 58 :
  <?xml version="1.0" encoding="iso-8859-1"?>    <!-- Pour pouvoir utiliser un éditeur qui ne sait pas éditer du UTF-8 -->
  <?xml version="1.0" encoding="iso-8859-1"?>    <!-- Pour pouvoir utiliser un éditeur qui ne sait pas éditer du UTF-8 -->


Pour compliquer les choses, Windows fait une extension de ISO-Latin1: WinLatin1 alias windows-1252. (problèmes surtout avec un des apostrophe et les double guillemets et qui se manifestent lorsqu'on passe de Word à un autre éditeur. Certains logiciels qui tournent sous Windows adoptent plutot ISO-latin simple, donc pas la version Microsoft ! Même type de problème pour le jeu de Apple MacRoman.).
Pour compliquer les choses, Windows fait une extension de ISO-Latin1: WinLatin1 alias windows-1252. (problèmes surtout avec un des apostrophes et les double guillemets et qui se manifestent lorsqu'on passe de Word à un autre éditeur. Certains logiciels qui tournent sous Windows adoptent plutot ISO-latin simple, donc pas la version Microsoft ! Même type de problème pour le jeu de Apple MacRoman.).


=== Les URLs compliquent les choses (!) ===
=== Les URLs compliquent les choses (!) ===


La spécification des URLS interdit l'usage des blancs (pour plusieurs raisons). Donc normalement, pour les blancs, on DOIT utiliser l'encodage hexadecimal ISO latin / UTF-8 dans un URL.
La spécification des URLS interdit l'usage des blancs, et ce pour plusieurs raisons. Donc normalement, pour les blancs, on DOIT utiliser l'encodage hexadecimal ISO latin / UTF-8 dans un URL.
  Mon fichier.htm
  Mon fichier.htm
devient:
devient:
  Mon%20fichier.htm
  Mon%20fichier.htm


En principe il faudrait aussi appliquer ce principe pour tous les caractères accentués, mais le problème se corse:
Normalement, il faudrait aussi appliquer ce principe pour tous les caractères accentués, mais le problème se corse:
  http://edutechwiki.unige.ch/fr/Encodage_de_caractères
  http://edutechwiki.unige.ch/fr/Encodage_de_caractères
devient en ISO hexadecimal (et peut marcher, mais il ne faut pas parier):
devient en ISO hexadecimal (et peut marcher, mais il ne faut pas parier):
Ligne 80 : Ligne 80 :
=== Le mail ajoute ===
=== Le mail ajoute ===


Tout texte envoyé par mail (et surtout les entêtes doit aussi être encodé)
Tout texte envoyé par mail, et surtout les entêtes, doit aussi être encodé
   To: Dave Crocker <dcrocker@mordor.stanford.edu>
   To: Dave Crocker <dcrocker@mordor.stanford.edu>
   Cc: ietf-822@dimacs.rutgers.edu, paf@comsol.se
   Cc: ietf-822@dimacs.rutgers.edu, paf@comsol.se
   From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf@nada.kth.se>
   From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf@nada.kth.se>
   Subject: Re: RFC-HDR care and feeding
   Subject: Re: RFC-HDR care and feeding
Si votre mailer n'arrive pas à gérer ces entetes cela cela pose moins problèmes (car normalement votre adresse email ne contient pas d'accents). Par contre, si vous attachez des fichiers qui ont des noms avec des accents, certains de vos correspondants ne pourront pas les ouvrir.
Si votre boîte mail n'arrive pas à gérer ces entêtes cela pose moins problème (car normalement votre adresse e-mail ne contient pas d'accents). Par contre, si vous attachez des fichiers qui ont des noms avec des accents, certains de vos correspondants ne pourront pas les ouvrir.


Il existe actuellement deux standards incompatibles pour coder les noms de fichier de pièces-jointes qui comprennent des caractères accentués (comme le fichier "à Genève français.png" attaché à ce message), ce qui peut causer des difficultés à celui qui reçoit de tels fichiers (nom du fichier remplacé par "Untitledn" avec Eudora, par "ATTnnnnn" avec Outlook, etc...).
Il existe actuellement deux standards incompatibles pour coder les noms de fichiers de pièces-jointes qui comprennent des caractères accentués (comme le fichier "à Genève français.png" attaché à ce message), ce qui peut causer des difficultés à celui qui reçoit de tels fichiers (nom du fichier remplacé par "Untitled" avec Eudora, par "ATTnnnnn" avec Outlook, etc...).
La version Thunderbird 1.5 code par défault ces noms de fichier selon le nouveau standard RFC2231 alors que la plupart des autres logiciels, y compris les versions précédentes de Thunderbird, utilise l'ancien standard RFC2047.
La version Thunderbird 1.5 code par défaut ces noms de fichiers selon le nouveau standard RFC2231 alors que la plupart des autres logiciels, y compris les versions précédentes de Thunderbird, utilisent l'ancien standard RFC2047.


=== Conclusion ===
=== Conclusion ===
Ligne 94 : Ligne 94 :
Utiliser des caractères sur Internet reste un cauchemar et je ne peux conseiller que 2 choses pour vous simplifier la vie:
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)
# Toujours vérifier ce que votre éditeur sait éditer comme code (et toujours utiliser le même, je conseille UTF-8)
# Pas de blancs ni de caractères accentués pour les noms de fichiers et URLs.
# Pas de blancs ni de caractères accentués pour les noms de fichiers et URLs.


Ligne 116 : Ligne 116 :


* [http://www.macchiato.com/unicode/chart/ Unicode 4.1.0 Chart]
* [http://www.macchiato.com/unicode/chart/ Unicode 4.1.0 Chart]
* [http://www.unicode.org/charts/ Unicode Character Code Charts ] (PDF files)
* [http://www.unicode.org/charts/ Unicode Character Code Charts] (PDF files)


; HTML
; HTML
Ligne 124 : Ligne 124 :
* [http://www.uni-passau.de/~ramsch/iso8859-1.html iso8859-1 Table]
* [http://www.uni-passau.de/~ramsch/iso8859-1.html iso8859-1 Table]
* [http://www.cs.tut.fi/~jkorpela/html/guide/entities.html Table of character entity references in HTML 4]
* [http://www.cs.tut.fi/~jkorpela/html/guide/entities.html Table of character entity references in HTML 4]
* [http://www.bbsinc.com/iso8859.html ASCII - ISO 8859-1 (Latin-1)Table with HTML Entity Names ]
* [http://www.bbsinc.com/iso8859.html ASCII - ISO 8859-1 (Latin-1)Table with HTML Entity Names]
* [http://czyborra.com/charsets/iso8859.html The ISO 8859 Alphabet Soup ]
* [http://czyborra.com/charsets/iso8859.html The ISO 8859 Alphabet Soup]


=== Convertisseurs en ligne ===
=== Convertisseurs en ligne ===
Ligne 133 : Ligne 133 :
* [http://www.unicodetools.com/unicode/utf8-to-latin-converter.php UniCode Tools] utf-8 to latin1 et dans l'autre sens.
* [http://www.unicodetools.com/unicode/utf8-to-latin-converter.php UniCode Tools] utf-8 to latin1 et dans l'autre sens.
* [http://www.greywyvern.com/code/php/utf8_html Text to UTF-8 or HTML Entities Tool]
* [http://www.greywyvern.com/code/php/utf8_html Text to UTF-8 or HTML Entities Tool]
* [http://konieczny.be/unicode.html Unicode (UTF-8) to HTML entity online converter]
* [http://konieczny.be/unicode.html Unicode (UTF-8) to HTML entity online converter]
* [http://www.macchiato.com/unicode/convert.html UTF Converter]
* [http://www.macchiato.com/unicode/convert.html UTF Converter]
* [http://www.foxinternet.co.uk/keyboard.html Converter for funny characters into the proper HTML]
* [http://www.foxinternet.co.uk/keyboard.html Converter for funny characters into the proper HTML]

Dernière version du 13 mars 2017 à 18:12

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 d'autre chose, 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 est loin d'être résolu, au contraire en fait. Le monde est en train de migrer des 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 un problème d'encodage comme il y a quelques années lorsqu'on migrait de ASCII vers ISO, et cela peut devenir cauchemardesque. D'autant plus que Windows ajoute encore à cela des 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.-à-d. : 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 ce n'est pas le cas dans l'autre sens et il y a bien sûr des problèmes avec les variantes iso-latin (skandinave, windows, etc etc.). Un jeu ISO ne comprend jamais toute la gamme de caractères accentués (et donc un même code signifie parfois autre chose dans un autre jeu)

Au dela de ces quelques 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 entités 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 plutôt d'indiquer l'encodage au début du fichier.

Exemples d'entités et de références de caractères
             Entité             Référence de caractère
 Le blanc:   (pas d'entité)      &#32;  
 Le à:       &agrave;            &#224; 

Ces encodages &#n; (références de caractères) sont implémentés dans tous les navigateurs modernes.

Par contre, si on veut taper les caractères "tels quels", il faut toujours éditer le fichier avec le même encodage: Donc soit en ISO-latinXXX, soit en UTF-8. La tendance va vers UTF-8 (car on peut mélanger toutes les langues dans une page, sans devoir taper des 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 "?" si votre page "tourne" en ISO-latin.

Il faut donc s'assurer à ce que le jeu 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, par exemple:

<?xml version="1.0" ?>                         
<?xml version="1.0" encoding="iso-8859-1"?>    

Pour compliquer les choses, Windows fait une extension de ISO-Latin1: WinLatin1 alias windows-1252. (problèmes surtout avec un des apostrophes et les double guillemets et qui se manifestent lorsqu'on passe de Word à un autre éditeur. Certains logiciels qui tournent sous Windows adoptent plutot ISO-latin simple, donc pas la version Microsoft ! 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, et ce pour plusieurs raisons. Donc normalement, pour les blancs, on DOIT utiliser l'encodage hexadecimal ISO latin / UTF-8 dans un URL.

Mon fichier.htm

devient:

Mon%20fichier.htm

Normalement, il faudrait aussi appliquer ce principe pour tous les caractères accentués, mais le problème se corse:

http://edutechwiki.unige.ch/fr/Encodage_de_caractères

devient en ISO hexadecimal (et peut marcher, mais il ne faut pas parier):

http://edutechwiki.unige.ch/fr/Encodage_de_caract%E8res

Dans le wiki on voit un encodage sur 2 bytes (représentation en UTF-8):

http://edutechwiki.unige.ch/fr/Encodage_de_caract%C3%A8res

Maintenant pour revenir aux simples "blancs": certains logiciels ont de la peine à traduire un caractère blanc dans un lien vers une 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 (à développer).

Et c'est pour cela qu'on déconseille normalement d'utiliser des blancs pour des fichiers et leurs liens.

Le mail ajoute

Tout texte envoyé par mail, et surtout les entêtes, doit aussi être encodé

  To: Dave Crocker <dcrocker@mordor.stanford.edu>
  Cc: ietf-822@dimacs.rutgers.edu, paf@comsol.se
  From: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf@nada.kth.se>
  Subject: Re: RFC-HDR care and feeding

Si votre boîte mail n'arrive pas à gérer ces entêtes cela pose moins problème (car normalement votre adresse e-mail ne contient pas d'accents). Par contre, si vous attachez des fichiers qui ont des noms avec des accents, certains de vos correspondants ne pourront pas les ouvrir.

Il existe actuellement deux standards incompatibles pour coder les noms de fichiers de pièces-jointes qui comprennent des caractères accentués (comme le fichier "à Genève français.png" attaché à ce message), ce qui peut causer des difficultés à celui qui reçoit de tels fichiers (nom du fichier remplacé par "Untitled" avec Eudora, par "ATTnnnnn" avec Outlook, etc...). La version Thunderbird 1.5 code par défaut ces noms de fichiers selon le nouveau standard RFC2231 alors que la plupart des autres logiciels, y compris les versions précédentes de Thunderbird, utilisent l'ancien standard RFC2047.

Conclusion

Utiliser des caractères sur Internet reste un cauchemar et je ne peux conseiller que 2 choses pour vous simplifier la vie:

  1. Toujours vérifier ce que votre éditeur sait éditer comme code (et toujours utiliser le même, je conseille UTF-8)
  2. Pas de blancs ni de caractères accentués pour les noms de fichiers et URLs.

Liens

Spécifications

(some)

Character codes
MIME

Tables

HTML

Convertisseurs en ligne

Comme ces sites changent souvent, cherchez: "Online utf-8 converter"

Tutorials

En français
En Anglais
Articles Wikipedia

URL encoding

  • URL Encoding (or what are those " " codes in URLs?') by Brian Wilson

Internationalisation et localisation

[[::Internationalisation|Internationalisation]] (edutech wiki )