【问题标题】:How to decode ¥ in JSON [duplicate]如何在 JSON 中解码 ¥ [重复]
【发布时间】:2014-05-08 06:13:38
【问题描述】:

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

我收到了这个错误 当我使用 json.loads 时

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

但是我该如何解决呢?我要重新解码和编码吗?

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

谢谢!

更新:

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

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

这个问题的答案可能是:

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

【问题讨论】:

  • JSON 默认在 utf8 上运行。您必须先将字符串转换为 utf8。如果您不知道编码,那么您无能为力。
  • 我试过了 json.loads(contents,encoding='latin1') 似乎工作。但如果有人能给出更全面的答案,将不胜感激!谢谢!
  • 但是有什么你不明白的?您有一个不同编码的字符串,因此您在执行json.loads 时指定编码并且它可以工作。故事的结局。
  • @Niebieski 你不应该猜测编码。数据源应告诉您编码,例如,如果您从 Web 下载文件,则使用 HTTP 标头。
  • 真的需要查看您从何处获取 JSON。生成它的代码有一个错误(JSON 是 UTF-8),只有在所有其他方法都失败时才应该在消费者端修复它。

标签: python json encode google-finance


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 事实上,来源是错误的,因为正确的 JSON 是按照定义 UTF-8。
    • 对于未来尝试解决此问题的访问者,也许需要说明您需要知道正确的编码。输入“Latin-1”绝对会消除错误消息,但如果这实际上不是正确的编码,则会产生垃圾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2021-12-13
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多