2010-05-11 64 views
3

在一个文本文件(test.txt的),我的字符串看起来是这样的:Python文件输入字符串:如何处理转义的Unicode字符?

Gro\u00DFbritannien 

读它,蟒蛇逃出反斜线:

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

我怎么能有这样的解释为Unicode? decode()unicode()不会做这项工作。

下面的代码将Gro\u00DFbritannien回文件,但我希望它是Großbritannien

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

如果您想将Python unicode对象序列化为文件,为什么不尝试使用'cPickle'模块? – rlotun 2010-05-11 13:47:18

+0

该数据来自http://downloads.dbpedia.org/3.5.1/de/persondata_de.nt.bz2 使用Python 2.6 – Michi 2010-05-11 14:11:28

回答

4

使用内置的“unicode_escape”编解码器:

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

您也可以使用codecs.open()

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

标准编码列表可在Python文档中:http://docs.python.org/library/codecs.html#standard-encodings

8

您要使用的编解码器unicode_escape

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

为广大而来的Python标准库的一部分,标准编码见the docs

+1

不错。这个人*逃脱了我。 – 2010-05-11 14:38:35