====== 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. [[https://en.wikipedia.org/wiki/C0_and_C1_control_codes]] ===== NewLines ===== Sous: * Unix: caractère LineFeed(LF), hex0A, ''\n'' * Mac: caractère CarriageReturn(CR), hex0D, ''\r'' * DOS / Windows: CR+LF, hex0D0A, ''\r\n'' Ressources: [[http://linux.byexamples.com/archives/219/convert-newline-between-unix-dos/|HexDump]] [[http://www.fileformat.info/tool/hexdump.htm|OnLine]], [[http://www.asciitable.com/|AsciiTable]], [[http://pythonweb.org/projects/webmodules/doc/0.5.3/html_multipage/lib/node48.html|Special chars in python]] Astuces: * La méthode ''open'' de python n'est pas sensible à la convention utilisée. Ses méthodes ''read'' fournissent insensiblement ''\n'' tandis que sa méthode ''write'' é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 une ''HttpResponse''. 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 [[http://www.python.org/dev/peps/pep-0263/|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 ^^)