2010-05-11 7 views
3

Dans un fichier texte (test.txt), ma chaîne ressemble à ceci:Chaîne d'entrée de fichier Python: comment gérer les caractères Unicode échappés?

Gro\u00DFbritannien 

lisant, python échappe à la barre oblique inverse:

>>> file = open('test.txt', 'r') 
>>> input = file.readline() 
>>> input 
'Gro\\u00DFbritannien' 

Comment puis-je avoir cette interprété comme unicode? decode() et unicode() ne fera pas le travail.

Le code suivant écrit Gro\u00DFbritannien dans le fichier, mais je veux que ce soit Großbritannien

>>> input.decode('latin-1') 
u'Gro\\u00DFbritannien' 
>>> out = codecs.open('out.txt', 'w', 'utf-8') 
>>> out.write(input) 
+0

Si vous souhaitez sérialiser des objets Unicode Python dans un fichier, pourquoi ne pas essayer d'utiliser le module 'cPickle'? – rlotun

+0

Les données proviennent de http://downloads.dbpedia.org/3.5.1/de/persondata_de.nt.bz2 Utilisation de Python 2.6 – Michi

Répondre

4

Utilisez le codec intégré 'unicode_escape':

>>> file = open('test.txt', 'r') 
>>> input = file.readline() 
>>> input 
'Gro\\u00DFbritannien\n' 
>>> input.decode('unicode_escape') 
u'Gro\xdfbritannien\n' 

Vous pouvez également utiliser codecs.open() :

>>> import codecs 
>>> file = codecs.open('test.txt', 'r', 'unicode_escape') 
>>> input = file.readline() 
>>> input 
u'Gro\xdfbritannien\n' 

La liste des encodages standards est disponible dans la documentation Python: http://docs.python.org/library/codecs.html#standard-encodings

8

Vous voulez utiliser le codec unicode_escape:

>>> x = 'Gro\\u00DFbritannien' 
>>> y = unicode(x, 'unicode_escape') 
>>> print y 
Großbritannien 

Voir the docs pour le grand nombre d'encodages standards qui viennent dans le cadre de la bibliothèque standard de Python.

+1

Nice. Celui-ci m'avait * échappé. –