2010-05-11 62 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