Je travaille avec des données externes codées en latin1. Donc, j'ai ajouter sitecustomize.py
et il a ajoutéDéfinir la gestion des erreurs de codage/décodage par défaut implicite dans python
sys.setdefaultencoding('latin_1')
bien sûr
, travaille maintenant avec des cordes latin1 fonctionne très bien.
Mais, au cas où je rencontre quelque chose qui est pas codé en latin1:
s=str(u'abc\u2013')
Je reçois UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 3: ordinal not in range(256)
Ce que je voudrais est que les caractères indécodables seraient simplement ignorés, à savoir je recevrais que dans l'exemple ci-dessus s=='abc?'
, et le faire sans appeler explicitement decode()
ou encode
à chaque fois, c'est-à-dire pas à.d.dode (..., 'remplacer') sur chaque appel.
J'ai essayé de faire des choses différentes avec codecs.register_error
mais en vain.
aidez s'il vous plaît?
Si vous faites 's = str (u'abc \ u2013 ')', vous voulez travailler en unicode, ce qui semble bizarre si vous définissez l'encodage par défaut 'latin-1' –
Ceci est une mauvaise idée: http://tarekziade.wordpress.com/2008/01/08/syssetdefaultencoding-is-evil/. Si vous travaillez avec des chaînes codées, vous devez les décoder explicitement. Sinon, vous risquez de couvrir des bogues désagréables. – katrielalex
Plus précisément, vous devriez travailler avec Unicode à l'intérieur de votre module. Décoder les données externes à leur arrivée et les encoder quand elles disparaissent. – katrielalex