在python中从windows-1252转换到utf-8

2 人关注

我想在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">
    
1 个评论
如果你在读写文本文件时,只需在读写时将编码作为参数传入: f = open(input_file, "r", encoding='Windows-1252') with safe_open_w(output_file, encoding='utf8') as f:
python
encoding
utf-8
decoding
windows-1252
asv
asv
发布于 2021-01-04
1 个回答
tripleee
tripleee
发布于 2021-01-04
已采纳
0 人赞同

你转换的方式是错误的。你想 decode 从cp1252,然后 encode 转换成 UTF-8。但后者并不是真的需要;Python已经为你做了。

When you decode 的东西,输入应该是 bytes ,结果是一个Python字符串。写一个字符串到一个文件已经隐含地转换了它,实际上你也可以为阅读做同样的事情,通过指定一个编码。

此外,将整个文件读入内存是不优雅和浪费的。