打印列表时python中的Unicode错误

时间:2012-06-11 09:59:10

标签: python unicode

修改:http://pastebin.com/W4iG3tjS - 文件

我有一个用utf8编码的文本文件,里面有一些西里尔文本。要加载它,我使用以下代码:

import codecs
fopen = codecs.open('thefile', 'r', encoding='utf8')
fread = fopen.read()

fread将文件转储到屏幕上所有unicodish(转义序列)。 print fread以可读的形式显示它(我猜是ASCII)。

然后我尝试将其拆分并将其写入没有编码的空文件:

a = fread.split()
for l in a: 
    print>>dasFile, l

但是我收到以下错误消息:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)

有没有办法将fread.split()转储到文件中?我怎样才能摆脱这个错误?

2 个答案:

答案 0 :(得分:4)

由于您已通过codecs.open()打开并读取文件,因此已将其解码为Unicode。所以要输出它,你需要再次编码,大概回到UTF-8。

for l in a:
    dasFile.write(l.encode('utf-8'))

答案 1 :(得分:0)

print将使用默认编码,通常是" ascii"。所以你看到打印错误。但是你可以打开一个文件并直接写入它。

a = fopen.readlines() # returns a list of lines already, with line endings intact
# do something with a
dasFile.writelines(a) # doesn't add line endings, expects them to be present already.

假设a中的行已经编码。

PS。您还应该调查io模块。