我想读取文件,在其中找到一些内容并保存结果,但是当我想保存它时会给我一个错误
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'))
我该怎么做才能解决它? 谢谢
答案 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值。