0

我正在使用python解析一个JSON文件,我知道是因为这个¥,

我在使用 json.loads 时遇到了这个错误

UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 106:
invalid start byte

但是我该如何解决呢?我要再次解码和编码吗?

¥是中国货币符号,但我不确定它属于哪个代码类别。

谢谢!

更新:

=====================

我想我的问题应该是,如果你看到这个符号,你是怎么猜到编码的。

这个问题的答案可能是:

如果您看到 ¥,则“utf-8”不起作用,请尝试“latin-1”。这种理解正确吗?

4

2 回答 2

0

使用以下代码解决了该问题:

 json.loads(contents,encoding='latin1') 

我对编码感到困惑,来源没有明确说明。

于 2014-12-06T07:01:05.840 回答
0

真正的答案是,在一般情况下,您无法确定未知数据的编码。

给定上下文,例如英文文本,您有时可以猜到例如c?rrupted“o”被“?”替换,但如果您没有那种上下文,您甚至无法判断哪些字节是错误的。

对于您的具体示例,您以错误的方式询问它。如果您看到日元符号,您使用哪种编码来查看数据?如果它是 Latin-1,那么您正在查看的字节值是 0xA5。这个值可以查到;您可能正在查看 v‎、¥‎、¸‎、Ë‎、Í‎、Ñ‎、Ą‎、ą‎、ċ‎、Ĩ‎、Ľ‎、ź‎、Β‎、Ξ‎、ξ ‎, Ѕ‎, Ц‎, е‎, Ґ‎, Ҙ‎, ح‎, ٪‎, ۴‎, ฅ‎, „‎, •‎, ₯‎, ╔‎, ﺄ‎, 或一个片段多字节编码。

如果产生未知数据的程序或组织可用,您可以与人交谈和/或试用该软件;但是如果找不到权威的答案,你最终只是猜测,或者放弃。

现代格式需要已知编码是有原因的,并且会拒绝明显违反该编码的输入。

于 2014-12-06T07:32:29.627 回答