2013-01-20 76 views
0

我使用BeautifulSoup来解析一些XML文件。该文件中的一个字段经常使用Unicode字符。我已经尝试使用编码将unicode写入文件失败。Python - 将unicode字符串写入文件和美丽的汤

的方法迄今基本上是:

  1. 获取名称

    gamename = items.find( '姓名')string.strip()

  2. 然后合并的名称。转换成稍后转换为字符串的列表:

    stringtoprint = userid,gamename.encode('utf-8')#​​

    newstring =“INSERT INTO collections VALUES”+ str(stringtoprint)+“;” +“\ n”

然后将该字符串写入文件。

listofgamesowned.write(newstring.encode( “UTF-8”))

看来,我不会有.encode这么频繁。我在分析名字时直接尝试编码,例如gamename = items.find('name').string.strip().encode('utf-8') - 但是,这似乎并没有工作。

目前 - 'Uudet大号\ XC3 \ xb6yt \ XC3 \ xb6retket'

正在打印和保存,而不是UudetLöytöretket。

看来,如果这是一个字符串,我正在产生然后我会用something.write(u'Uudet L\xc3\xb6yt\xc3\xb6retket');但是,它是嵌入在字符串中的一个元素。

+0

问题的根源在于尝试将unicode字符串添加到另一个字符串中,并期望以适当的方式写出。答案基本上不是试图去做 - 而是手动让字符串被写入以从例如字母开始。 +“','”+ etc +“','”... – Donnied

回答

1

Unicode是字符串的内存中表示形式。当你写出或读入时,你需要编码和解码。

Uudet L\xc3\xb6yt\xc3\xb6retketutf-8编码版本Uudet Löytöretket,所以这是你想写出来的。当你想从文件中读取一个字符串时,你需要对它进行解码。

>>> print 'Uudet L\xc3\xb6yt\xc3\xb6retket' 
Uudet Löytöretket 
>>> print 'Uudet L\xc3\xb6yt\xc3\xb6retket'.decode('utf-8') 
Uudet Löytöretket 

只记得在你读完之后立即输出和解码之前立即进行编码。

+0

如果我只是想将“UudetLöytöretket”写入文件,我该怎么办? – Donnied

+0

写'Uudet L \ xc3 \ xb6yt \ xc3 \ xb6retket',当你想读取文件时,确保你用'utf-8'解码。 – Tim

+0

也许我有点困惑。终端的默认编码是utf-8 - 因此,如果我在其中添加了“UudetLöytöretket”文件,我预计会看到“UudetLöytöretket”,因为原始文件被捕获时不是“Uudet L \ xc3 \ xb6yt \ xc3 \ xb6retket“当前正在显示。 – Donnied