Comment gérer UTF8

#1

bonjour à tous,

une petite question, comment gérer l’UTF8 dans du code Snippets?
err = "je n’ai pas trouvé le mot "
print err

UnicodeDecodeError: ‘ascii’ codec can’t decode byte

merci par avance

#2

err = u"je n’ai pas trouvé le mot"

#3

non, ca ne résoud pas le pb :frowning:

UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xe9’ in position 17: ordinal not in range(128)

#4

Rajoute # -*- coding: utf-8 -*- en première ligne de ton script (ou en deuxième, s’il y a déjà “#!/usr/bin/env python2”.

Dans le doute, regarde le template Python 2 : https://github.com/snipsco/snips-actions-templates/blob/master/templates/python2/action-{{action_name}}.py.tpl

Mais le mieux reste de passer à Python 3 qui résout notamment ces problèmes. Je ne compte plus les scripts du store qui plantent sur ces problèmes. Le support officiel de Python 2 s’arrête de toute façon en 2020.

Edit: correction de la ligne de coding mangée par la conversion HTML, j’avais pas fait attention.

#5

trouvé une solution cracra mais qui marche :
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)

#6

Yes, python 3 est clairement le bon choix.

Si vous êtes bloqué sur python 2

  • Vérifiez vos installations des locales sur raspi avec raspi-config. Il vous faut des locales utf-8
  • Il faut ajouter le u devant la chaîne de charactère.
#7

Alternative à passer sur toutes les chaînes pour rajouter le préfixe u :

from __future__ import unicode_literals

au début des imports (à la suite de # -*- coding: utf-8 -*-).

Mais faudrait vraiment être bloqué sur Python 2, ce qui n’est pas le cas sur le Raspberry Pi.

J’en profite tant que je l’ai sous la main pour poster ce lien vers un thread de conversion de skill à Python 3 : HOWTO: Convert your Snips skills to Python 3

Ça peut paraître beaucoup mais si vous êtes le seul utilisateur de votre application maison, pas besoin de s’embêter à écrire un setup.sh capable de faire la migration chez les utilisateurs.

#8

Bien vu, en effet ajouter from __future__ import unicode_literals est une solution possible.

C’est un des problèmes de ce module ajouté à hermes-python pour gérer la compatibilité python2 / python3.

Une fois ajouté dans une lib il y a un risque de devoir l’ajouter aussi dans tous le code qui en dépend.

Bref, la fin du support de python 2 est dans 9 mois :slight_smile: