Comments on: L’encoding en Python, une bonne fois pour toute http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/ Deux développeurs en vadrouille qui se sortent les doigts du code Wed, 05 Feb 2014 12:15:31 +0000 hourly 1 http://wordpress.org/?v=3.3.1 By: Réchèr http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-18744 Réchèr Tue, 21 Jan 2014 08:47:13 +0000 http://sametmax.com/?p=5824#comment-18744 Cela va sans dire, mais je précise que dans mon code précédent, j'ai bien évidemment mis le "from __future__ import unicode_literals" au début de mes fichiers. Du coup la chaîne "é mon cul cé du poulé" est de l'unicode. Et ça marche, je vois mes accents, aussi bien dans la console DOS que dans la console Sublime Text. Cela va sans dire, mais je précise que dans mon code précédent, j’ai bien évidemment mis le “from __future__ import unicode_literals” au début de mes fichiers.

Du coup la chaîne “é mon cul cé du poulé” est de l’unicode.

Et ça marche, je vois mes accents, aussi bien dans la console DOS que dans la console Sublime Text.

]]>
By: Réchèr http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-18737 Réchèr Mon, 20 Jan 2014 23:01:08 +0000 http://sametmax.com/?p=5824#comment-18737 Article auquel je me réfère régulièrement, car à chaque fois que je résout mes problèmes d'encodage, je ne me souviens plus comment je les ais résolus et je dois refaire le raisonnement dans mon cerveau. Juste pour info : y'a des fois, syt.stdout.encoding renvoie None. Je suis en python 2.7 sous Windows (oui, je sais), quand j'exécute mon script dans la console, j'ai "cp850". Quand je l'exécute avec Ctrl-B dans Sublime Text, j'ai None. Du coup, je fais le bourrin comme ça pour écrire sur stdout : <pre lang="python"> # récupération de l'encodage de la sortie standard. encoding_out = sys.stdout.encoding if encoding_out is None: encoding_out = "utf-8" def pri(whatever): unicode_string = unicode(whatever) print unicode_string.encode(encoding_out, "replace") pri("é mon cul cé du poulé.") </pre> Article auquel je me réfère régulièrement, car à chaque fois que je résout mes problèmes d’encodage, je ne me souviens plus comment je les ais résolus et je dois refaire le raisonnement dans mon cerveau.

Juste pour info : y’a des fois, syt.stdout.encoding renvoie None.

Je suis en python 2.7 sous Windows (oui, je sais), quand j’exécute mon script dans la console, j’ai “cp850″. Quand je l’exécute avec Ctrl-B dans Sublime Text, j’ai None.

Du coup, je fais le bourrin comme ça pour écrire sur stdout :

# récupération de l'encodage de la sortie standard.
encoding_out = sys.stdout.encoding
if encoding_out is None:
    encoding_out = "utf-8"
 
def pri(whatever):
    unicode_string = unicode(whatever)
    print unicode_string.encode(encoding_out, "replace")
 
pri("é mon cul cé du poulé.")
]]>
By: Bromway http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-17557 Bromway Thu, 26 Dec 2013 22:43:53 +0000 http://sametmax.com/?p=5824#comment-17557 Juste au Top! Un super cadeau de Noel qui vient de m'offrir une ou deux nuit planche de moins Juste au Top!
Un super cadeau de Noel qui vient de m’offrir une ou deux nuit planche de moins

]]>
By: Adrien http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-15398 Adrien Mon, 04 Nov 2013 14:41:52 +0000 http://sametmax.com/?p=5824#comment-15398 Un grand merci, enfin un tuto qui va à l'essentiel. J'ai enfin compris comment ça fonctionne. Un grand merci, enfin un tuto qui va à l’essentiel. J’ai enfin compris comment ça fonctionne.

]]>
By: Guts http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-14882 Guts Wed, 16 Oct 2013 10:29:48 +0000 http://sametmax.com/?p=5824#comment-14882 Merci pour l'article qui m'a bien aidé sur certains points de blocage mais il y a toujours quelque chose que je ne parviens pas à résoudre : le parsing (avec os.walk) de fichiers qui contiennent des accents. Ce qui me déroute surtout c'est la différence entre Windows et Ubuntu. Dans mon <a href="https://github.com/Guts/Metadator" rel="nofollow">programme</a> j'ai une fonction (li_geofiles()) chargée de lister les fichiers compatibles (selon leur extension et l'existence de leurs dépendances) contenus dans une arborescence à partir d'un dossier indiqué par l'utilisateur (foldertarget retourné via tkMessageBox.askdirectory) et qui bloque sur les noms de fichiers qui contiennent un accent...mais seulement sur Ubuntu ! Ça fait 2 jours que je me flagelle là-dessus et j'ai essayé qqls solutions : - un try/except sur le nom de fichier et réencodage à la volée (solution choisie) mais qui a le (gros) défaut de ne pas lister les fichiers avec accents (os.path.isfile ne les reconnaît pas...) - passer foldertarget en unicode mais ça marche pô (idem avec path.normpath(foldertarget) Voici la fonction en question : <pre lang="python"> for root, dirs, files in walk(foldertarget): self.num_folders = self.num_folders + len(dirs) for f in files: try: unicode(path.join(root, f)) full_path = path.join(root, f) except UnicodeDecodeError, e: full_path = path.join(root, f.decode('latin1').encode('utf8')) self.logger.error("%s:%s" % (e, f.decode('utf-8'))) # Looping on files contained if path.splitext(full_path.lower())[1] == '.shp' and \ path.isfile('%s.dbf'.lower() % full_path[:-4]) and \ path.isfile('%s.shx'.lower() % full_path[:-4]) and \ path.isfile('%s.prj'.lower() % full_path[:-4]): # add complete path of shapefile self.li_shp.append(full_path) elif path.splitext(full_path.lower())[1] == '.tab' and \ path.isfile(full_path[:-4]+ '.dat'.lower()) and \ path.isfile(full_path[:-4]+ '.map'.lower()) and \ path.isfile(full_path[:-4]+ '.id'.lower()): # add complete path of MapInfo file self.li_tab.append(full_path) </pre> Si quelqu'un voit le problème...et surtout la solution ! PS : je suis géographe à la base donc pas vraiment un développeur... #indulgence Merci pour l’article qui m’a bien aidé sur certains points de blocage mais il y a toujours quelque chose que je ne parviens pas à résoudre : le parsing (avec os.walk) de fichiers qui contiennent des accents. Ce qui me déroute surtout c’est la différence entre Windows et Ubuntu.

Dans mon programme j’ai une fonction (li_geofiles()) chargée de lister les fichiers compatibles (selon leur extension et l’existence de leurs dépendances) contenus dans une arborescence à partir d’un dossier indiqué par l’utilisateur (foldertarget retourné via tkMessageBox.askdirectory) et qui bloque sur les noms de fichiers qui contiennent un accent…mais seulement sur Ubuntu ! Ça fait 2 jours que je me flagelle là-dessus et j’ai essayé qqls solutions :
- un try/except sur le nom de fichier et réencodage à la volée (solution choisie) mais qui a le (gros) défaut de ne pas lister les fichiers avec accents (os.path.isfile ne les reconnaît pas…)
- passer foldertarget en unicode mais ça marche pô (idem avec path.normpath(foldertarget)

Voici la fonction en question :

for root, dirs, files in walk(foldertarget):
    self.num_folders = self.num_folders + len(dirs)
        for f in files:
            try:
                unicode(path.join(root, f))
                full_path = path.join(root, f)
            except UnicodeDecodeError, e:
                full_path = path.join(root, f.decode('latin1').encode('utf8'))
                self.logger.error("%s:%s" % (e, f.decode('utf-8')))
            # Looping on files contained
            if path.splitext(full_path.lower())[1] == '.shp' and \
                path.isfile('%s.dbf'.lower() % full_path[:-4]) and \
                path.isfile('%s.shx'.lower() % full_path[:-4]) and \
                path.isfile('%s.prj'.lower() % full_path[:-4]):
                    # add complete path of shapefile
                    self.li_shp.append(full_path)
            elif path.splitext(full_path.lower())[1] == '.tab' and \
                path.isfile(full_path[:-4]+ '.dat'.lower()) and \
                path.isfile(full_path[:-4]+ '.map'.lower()) and \
                path.isfile(full_path[:-4]+ '.id'.lower()):
                    # add complete path of MapInfo file
                    self.li_tab.append(full_path)

Si quelqu’un voit le problème…et surtout la solution !

PS : je suis géographe à la base donc pas vraiment un développeur… #indulgence

]]>
By: Max http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-14444 Max Tue, 01 Oct 2013 10:27:52 +0000 http://sametmax.com/?p=5824#comment-14444 C'est laborieux chez leaseweb :/ Ensuite ça a été un probleme de varnish qui s'est bien lancé quand leaseweb a reboot les VPS mais qui pour une raison mystérieuse ne voulait rien savoir :/ C’est laborieux chez leaseweb :/
Ensuite ça a été un probleme de varnish qui s’est bien lancé quand leaseweb a reboot les VPS mais qui pour une raison mystérieuse ne voulait rien savoir :/

]]>
By: A_Vgyle http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-14435 A_Vgyle Fri, 27 Sep 2013 20:25:02 +0000 http://sametmax.com/?p=5824#comment-14435 Merci grandement! 2 jours que je plante sur ces %?!/%££!! d'encoding, et en 15 minutes... Réglé Thanx Continue!!! Merci grandement!
2 jours que je plante sur ces %?!/%££!! d’encoding, et en 15 minutes… Réglé
Thanx
Continue!!!

]]>
By: yuiio http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-12441 yuiio Mon, 05 Aug 2013 14:26:15 +0000 http://sametmax.com/?p=5824#comment-12441 Juste merci Juste merci

]]>
By: Kyoku57 http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-8678 Kyoku57 Sun, 05 May 2013 10:42:26 +0000 http://sametmax.com/?p=5824#comment-8678 Alors là, très bon article ! Quelque soit le langage, le problème le plus récurrent est toujours celui de la manipulation des différents types d'encoding. Je ne te parle pas de ceux qui développent sous Windows avec un CP-1252 par défaut dans tous les logiciels et qui même avec un réglage de l'IDE finit un jour où l'autre par te ressortir l'encoding par défaut genre .. à la réouverture. Bref, éternel problème que tu as très bien mis en évidence. Tout le problème est d'origine interface chaise-clavier. Il faut se sortir les doigts du boule pour faire du propre. Alors là, très bon article !

Quelque soit le langage, le problème le plus récurrent est toujours celui de la manipulation des différents types d’encoding.

Je ne te parle pas de ceux qui développent sous Windows avec un CP-1252 par défaut dans tous les logiciels et qui même avec un réglage de l’IDE finit un jour où l’autre par te ressortir l’encoding par défaut genre .. à la réouverture.

Bref, éternel problème que tu as très bien mis en évidence. Tout le problème est d’origine interface chaise-clavier. Il faut se sortir les doigts du boule pour faire du propre.

]]>
By: Sam http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/#comment-8397 Sam Tue, 23 Apr 2013 21:38:03 +0000 http://sametmax.com/?p=5824#comment-8397 C'est l'acceng, c'est pour ça. C’est l’acceng, c’est pour ça.

]]>