如何在JSON中解码¥
我正在用Python解析一个JSON文件,我知道是因为这个¥符号,
所以我在使用json.loads的时候遇到了这个错误。
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 106:
invalid start byte
那我该怎么解决呢?是要重新解码和编码吗?
¥是人民币符号,但我不太确定它属于哪个编码类别。
谢谢!
更新:
====================
我觉得我的问题应该是,如果你看到这个符号,你怎么猜测它的编码。
这个问题的一个答案可能是:
如果你看到¥,那么“utf-8”可能不行,试试“latin-1”吧。 这样理解对吗?
2 个回答
0
这个问题是通过以下代码解决的:
json.loads(contents,encoding='latin1')
我对编码有点困惑,因为源代码没有明确说明。
0
其实,简单来说,对于一段不知道编码的数据,通常你是无法确定它的编码方式的。
如果有一些上下文,比如说是英文文本,有时候你可以猜测,比如说在 c?rrupted
这个词中,"o" 被替换成了 "?",但如果没有这些上下文信息,你甚至都不知道哪些字节是错的。
以你提到的例子来说,你问的问题方向是错的。如果你看到一个日元符号,你是用什么编码来看这段数据的呢?如果是 Latin-1 编码,那你看到的就是一个值为 0xA5 的字节。这个值可以查找,你可能看到的字符有 v、¥、¸、Ë、Í、Ñ、Ą、ą、ċ、Ĩ、Ľ、 ź、Β、Ξ、ξ、Ѕ、Ц、е、Ґ、Ҙ、ح、٪、۴、ฅ、„、•、₯、╔、ﺄ,或者是某种多字节编码的一部分。
如果能找到生成这段未知数据的程序或组织,你可以和他们沟通,或者试着用软件进行实验;但如果找不到权威的答案,你最终只能猜测,或者干脆放弃。
现代格式要求使用已知的编码方式,这是有原因的,如果输入明显不符合这些要求,系统会拒绝处理。