Table of Contents
Characters encoding
Le codage est caractères est un sujet souvent prise de têtes pour les informaticiens hors hardware. A un certain moment, l'ordinateur parlait uniquement anglais et donc le codage ne maitrisait que les caractères de l'alphabet anglais plus d'autres trucs genre “{[;:%$¤”'#~\'. Le codage utilisé était alors montagnard: ASCII. Et puis un jour, d'autres gens ont fait leurs propres codages pour pouvoir lire/écrire dans leurs langues.
Puis, enfin, des gens se sont dit: “et si on faisait un système universel pour gérer ça?” C'est à ce moment qu'est né l'unicode.
Mais même avec l'unicode, il subsiste des différences. Comme par exemple le retour à la ligne dans les fichiers texte.
NewLines
Sous:
- Unix: caractère LineFeed(LF), hex0A,
\n
- Mac: caractère CarriageReturn(CR), hex0D,
\r
- DOS / Windows: CR+LF, hex0D0A,
\r\n
Ressources: HexDump OnLine, AsciiTable, Special chars in python
Astuces:
- La méthode
open
de python n'est pas sensible à la convention utilisée. Ses méthodesread
fournissent insensiblement\n
tandis que sa méthodewrite
écrit avec la convention du système hôte (d'après ce que j'ai compris). - Lors de certaines manips (genre une vue Django qui sert un fichier CSV, on ouvre le fichier cible avec
open
et on refile ce fichier dans uneHttpResponse
. Ce faisant, python envoie un fichier avec des\n
seulement. Pour éviter ce problème: ouvrir le fichier en mode binaire ('rb
') (l'ouvrir en mode texte, le modifier, le fermer et le rouvrir en mode binaire s'il le faut).
Encodage de scripts
Windows
L'encodage par défaut sous Windows en Europe occidentale depuis Windows 3.0 est windows-1252, compatible avec iso_8859-1 (latin-1).
C'est celui utilisé par cmd.exe
.
Sous python, pour déclarer cet encodage (en emacs-style):
# -*- coding: windows-1252 -*-
AIX
L'encodage par défaut sur AIX 6.1.0.0 semble être utf-8.
Astuce
Notepad++ possède un Menu > Edition > Paneau des caractères ASCII
. Cela permet notamment d'insérer des caractères non imprimables (echap, CR, LF, etc) dans le document, puis de les copier-coller dans le programme de sn choix (au hasard : un émulateur de terminal ⇒ très pratique pour envoyer ^H à un programme genre telnet ^^)