UnicodeDecodeError:在python中保存到文件

时间:2014-02-07 12:32:05

标签: python runtime-error decode

我想读取文件,在其中找到一些内容并保存结果,但是当我想保存它时会给我一个错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 19: ordinal not in range(128)

保存到文件的代码:
fileout.write((key + ';' + nameDict[key]+ ';'+src + alt +'\n').decode('utf-8'))

我该怎么做才能解决它? 谢谢

1 个答案:

答案 0 :(得分:0)

您正在尝试使用字节字符串连接unicode值,然后将结果转换为unicode,将其写入最可能只占用字节字符串的文件对象。

不要混用unicode和字节字符串

打开要写入的文件io.open()以自动编码Unicode值,然后在代码中处理 only unicode:

import io

with io.open(filename, 'w', encoding='utf8') as fileout:
    # code gathering stuff from BeautifulSoup

    fileout.write(u'{};{};{}{}\n'.format(key, nameDict[key], src, alt)

您可能需要查看csv module以处理写出分隔符分隔值。如果你确实走了那条路线,你就必须明确地编码你的列:

import csv

with open(filename, 'wb') as fileout:
    writer = csv.writer(fileout, delimiter=';')
    # code gathering stuff from BeautifulSoup

    row = [key, nameDict[key], src + alt]
    writer.writerow([c.encode('utf8') for c in row])

如果某些数据来自其他文件,请确保您首先解码到Unicode;再次,io.open()读取这些文件可能是最好的选择,让您在阅读时将数据解码为Unicode值。