UTF-8 字符串在 excel 中被错误地解码为 UTF-16。如何对文件进行编码和解码,以便正确显示特殊字符?

UTF-8 strings were wrongly decoded as UTF-16 in excel. How can I encode and decode the file so special characters display correctly?

提问人:SlugQ 提问时间:11/22/2022 更新时间:11/22/2022 访问量:232

问:

我收到了一个 .xlsx 文件,其中外语字符似乎最初必须编码为 utf-8,然后解码为 utf-16。

我无权访问原始文件。

例如,à 和 é³ 应分别读作 é 和 ó,它们编码为 0xC3 0xA9 和 0xC3 0xB3。相反,每个 utf-8 字符在某个时候被解码为两个 utf-16 字符。

我尝试将它们编码为字节并用 UTF-8 解码它们,但这并不能正确翻译。

这:

    s = "ó".encode("utf-16")
    uni = s.decode("utf-8")
    print(uni)

返回以下内容:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

我已经尝试了上面的编码/解码序列,包括各种不同的参数,包括 UTF-16be 和 UTF-16le,以及解码的每个错误参数,只是切掉了 BOM,但没有一个有效。

有没有办法解决这个问题?一些库可以使这个过程比通过读取每个字符串并用 ó 替换 ó 来进行文字替换更痛苦?

python unicode 编码 utf-16

评论

2赞 Mark Tolonen 11/22/2022
"ó".encode('latin1').decode('utf8')或更有可能在 Windows 上"ó".encode('windows-1252').decode('utf8')
1赞 Giacomo Catenazzi 11/22/2022
在尝试调试之前,请务必检查您的假设。在这种情况下:Excel 使用了 cp1252 或 Latin-1,但没有使用 UTF-16(它是“外国的”,它可能使用其他编码)。不要将“外来”用于非 ASCII 字符:良好的英语需要超过 256 个字符(因此“Windows ANSI”也很小)。

答: 暂无答案