问题描述
我想在python中从windows-1252转换为utf-8,我写了这段代码:
def encode(input_file,output_file):
f = open(input_file,"r")
data = f.read()
f.close()
# Convert from Windows-1252 to UTF-8
encoded = data.encode('Windows-1252').decode('utf-8')
with safe_open_w(output_file) as f:
f.write(encoded)
encoded = data.encode('Windows-1252').decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 5653: invalid continuation byte
我尝试使用此元标记转换 html:
<Meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
解决方法
您转换的方式错误。您想从 cp1252 中解码,然后编码到 UTF-8。但后者并不是真正必要的。 Python 已经为您完成了。
当你解码某些东西时,输入应该是 bytes
,结果是一个 Python 字符串。将字符串写入文件已隐式转换它,实际上您也可以通过指定编码来执行相同的读取操作。
此外,将整个文件读入内存是不优雅和浪费的。
with open(input_file,'r',encoding='cp1252') as inp,\
open(output_file,'w',encoding='utf-8') as outp:
for line in inp:
outp.write(line)