> --> du coup y a pas quelqu'un qui veut expliquer comment gérer unicode en > python en 30 petites minutes?
Unicode en 30minutes? Ça va etre chaud. Ok je triche un peu en commençant ici. Probleme: Un ordinateur ne sait pas ce qu'est une lettre, un chiffre, un symbole etc, un ordinateur ne manipule que des octets. On ne peut pas demander a un etre humain de manipuler des octets, (certains y arrivent) Les etres humains manipulent des symboles (alphabet) Solution: les ASCII codes dont le role est de faire correspondre symboles et octets 1 symoble pr 1 octet. uniquement pr l'alphabet sans accent http://www.asciitable.com/ Probleme il existe de nombreux symboles sur terre, plusieurs alphabets on ne peut coder que 256 symboles avec ASCII. Solutions possibles: - ne parler uniquement que l'anglais, au diable les autres symboles <--- mon choix - utiliser 2 octets (ou plus) par symboles <-- mouais - utiliser unicode. <-- hourra Unicode: Fait correspondre un symbole a un code point, et ainsi pouvoir coder plus de 256 symboles Actuellement, env 110000 codes sont assignés, sur un total de 1.1M code points http://unicode-table.com/en/ Probleme: L'ordinateur ne manipule que des octets, rien a foutre des code points Solution: Faire correspondre code points et octets, grace aux encodings (utf-32, utf-16, utf-8 the king of encodings) Il existe donc en python2, deux types pour manipuler des chaines de caracteres: - str pr les chaines "d'octets" - unicode pr les chaines "de code points" >>> a = "Hello World" >>> type(a) <type 'str'> >>> a_unicode_string = u"Hello \u0057\u006F\u0072\u006C\u0064" >>> type(a_unicode_string) <type 'unicode'> >>> Pour passer du type unicode au type octets on utilise la fonction encode Pour passer du type octet au type unicode on utilise la fonction decode a_unicode_string = u"\u03A6\u03B1\u03C4" >>> type(a_unicode_string) <type 'unicode'> >>> bytes_from_unicode_string = a_unicode_string.encode("utf-8") >>> bytes_from_unicode_string '\xce\xa6\xce\xb1\xcf\x84' >>> type(bytes_from_unicode_string) <type 'str'> >>> bytes_from_unicode_string.decode("utf-8") u'\u03a6\u03b1\u03c4' >>> En python3 la gestion de unicode et des chaines de caracteres change. Faut que j'aille relire le cours, j'ai séché cette partie là. @Elwan? L'interet de tout ce charabia? Developper des systemes, capables de manipuler n'importe quel types de caracteres. <-- meme si en general, tout le monde s'en fiche royalement, moi le premier. @Elwan ma petite contribution a ton talk, je te laisse faire les comparaisons entre python2 et python3 Que quelqu'un me corrige si jamais j'ai raconté des conneries, faire de l'encoding a 4h, c'est pas malin -- Bests, --- "Still water is deep" Patrick Nsukami http://about.me/lemeteore -- Ce message a été envoyé à la liste [email protected] Gestion de votre abonnement : http://dakarlug.org/liste Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug Le site du DakarLUG : http://dakarlug.org
