> --> 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

Répondre à