python Colab“ascii”编解码器无法解码字节:序号不在编码为“utf-8”的范围(128)内

rbl8hiat  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(223)

我正在纠结一个问题,我只在Colab上遇到过,而在我的机器上没有。我正在阅读一些JSON文件,它抛出了一个UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 418: ordinal not in range(128)
这并不奇怪,因为这些文件实际上包含非ASCII字符,实际上,在文件的那个位置有非ASCII字符。但是我通常通过在json.load函数中添加encoding="utf-8"参数来解决这个问题,而在这里它没有任何作用。您知道我如何解决这个问题吗?

isr3a4wc

isr3a4wc1#

您的代码的一些例子将是非常有帮助的,我只能猜测在这种情况下会发生什么...然而,字符0xe2是一个有效的utf-8字符â,所以问题一定是在某种程度上你(你的json库)解码你的文件。我已经创建了一个测试JSON文件与单一的键/值对,试图重现你的问题:

{
    "test": "â",
    "end": null
}

关键字encoding似乎从Python 3.9之后的json库中删除了,当我在Python 3.10中运行with open("test.txt", "r") as f: json.load(f, encoding="utf-8")时,我得到了一个错误JSONDecoder.__init__() got an unexpected keyword argument 'encoding'
当我尝试运行with open("test.txt", "r") as f: json.load(f)时,一切似乎都运行顺利,没有错误,文件被加载,但是,输出不是我所期望的:{'test': 'â', 'end': None}

因此,我得出结论,您不应该使用json库来解码您的文件,而是在打开时自己解码。

我已经设法得到了完全相同的错误,你得到了当我试图解释为ascii字符串文件:一米一米一。
毫不奇怪,如果我尝试'utf-8',一切都运行得很好:with open("test.txt", "r", encoding="utf-8") as f: json.load(f)生成{'test': 'â', 'end': None}
有多种方法可以将文件传送到Colab。但您显然是在以某种方式打开它们,因为您有一个文件对象要传递给json.load函数。ascii编解码器将无法根据定义读取非ascii字符。您必须确保以不同的编码打开文件。如果您提供了一些如何打开文件的代码示例,我将能够提供更有针对性的帮助。

相关问题