1
4

1 回答 1

1

首先,澄清一下:您的方法不会从转换GB2312为 ASCII - 而且您也不希望它转换,因为 ASCII 不能代表 string '╠µ╔Ý╩²¥¦┤ª└Ý│╠ð‗'。返回的是decode一个不能直接在磁盘上表示的抽象字符序列——编码是一个序列化规则。这种类型unicode在 Python 2 和strPython 3 中被调用;的类型stdoutstr在 Python 2 和bytesPython 3 中。

将原始字节传递给json.loads尝试使用 utf-8 将输入反序列化(解码)为字符串。这会给出您看到的错误,因为您的输入是使用不同的、不兼容的编码进行序列化的。首先自己解码是正确的方法 - 在较新版本的 Python 中,json.loads无论如何都需要您这样做(它严格需要字符序列而不是字节序列)。

有一个警告:猜测编码,chardet 的方式,是困难的,并且可能容易出错。它恰好在这种特殊情况下有效,但如果您需要对其他文件执行类似的操作,您无法保证它会有效。这可能是您可以使用的最佳方法 - 通常,您希望看到文件元数据中早期提到的编码,但在这种情况下似乎并非如此。但是在进行猜测之前,您应该始终尝试找到一些有关它的权威信息。

于 2013-11-07T00:56:44.923 回答