1

编辑: 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()到文件中?我怎样才能摆脱这个错误?

4

2 回答 2

4

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

for l in a:
    dasFile.write(l.encode('utf-8'))
于 2012-06-11T10:04:17.487 回答
0

print 将使用默认编码,通常是“ascii”。因此,您会在 print 中看到该错误。但是您可以打开一个文件并直接写入它。

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模块。

于 2012-06-11T10:04:31.233 回答