【问题标题】:Error while parsing json with python用python解析json时出错
【发布时间】:2012-06-21 22:22:45
【问题描述】:

使用 python 解析时的以下消息给出以下错误。消息来自 json 文件 消息:

"Daca nu il stiti déjà, cu siguranta o sa va smulga un zambet. O portie de motivatie pentru toata lumea. :)", 

错误:

Traceback (most recent call last):
  File "C:\Users\X\Desktop\store_post.py", line 328, in <module>
    post_l_1 =jsonToPost.return_post_list(data2)
  File "C:\Users\X\Desktop\jsonToPost.py", line 20, in return_post_list
    post_message = json.dumps(read_,sort_keys = True, indent =2,skipkeys=True)
  File "C:\Python27\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Python27\lib\json\encoder.py", line 195, in encode
    return encode_basestring_ascii(o)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 18: invalid continuation byte

相关代码sn-p为:

post_message = json.dumps(read_,sort_keys = True, indent =2,skipkeys=True)
post_message = json.loads(post_message)

【问题讨论】:

  • "If you do not already know, certainly I will elicit a smile. A serving of motivation for everyone. :)"
  • post_message = json.dumps(read_,ensure_ascii= False, sort_keys = True, indent =2,skipkeys=True) post_message = json.loads(post_message, encoding= 'utf-16') 我们尝试了这个,它对这个数据有效,但对正常的 ascii 数据有问题。
  • read_ 来自哪里?
  • 它是一个包含消息的字符串,我们想将其转换为ascii,然后将其转储到数据库中

标签: python json parsing


【解决方案1】:

“它是一个包含消息的字符串,我们要将其转换为ASCII,然后将其转储到数据库中”

显示的字符串没有 ASCII 表示,因此,“将其转换为 ascii”是没有意义的。此外,听起来您正在尝试使用模块 json 来完成模块 codecs 设计的工作。我的猜测是您实际上是在尝试将字符串转换为可以编码“déjà”的ISO-8859-1

您可能还应该阅读并理解The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后也许您可以提出一个有意义的问题。

【讨论】:

  • json.dumps 默认转义所有非 ASCII 字符。
  • 太棒了;那么提问者是想逃跑还是皈依?如果逃脱了,他们在取回时会如何处理?请注意,他们搞砸了ensure_ascii=False,但这也无助于他们理解根本问题。
【解决方案2】:

您需要小心处理 Unicode。 Pragmatic Unicode, or How Do I Stop The Pain 有所有细节。你需要知道那个字节串使用的是什么编码,然后正确解码。

【讨论】:

  • 虽然“codepoint != user-perceived character”这一事实可能比仅仅作为“Fact of Life #5½”中的众多项目之一更值得一提。它将为len(unistr)(它不是字符数)、for c in unistr:(它不枚举字符)等常见事物设定正确的期望。
  • @J.F.Sebastian:我的时间有限,而且大部分时间都没有涉及任何与解释或理解 Unicode 相关的事情。仅仅适应所有关于正确复制文本的要点是一个挑战,更不用说理解它了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多