【问题标题】:How to convert a unicode object to a string or a python dictionary如何将 unicode 对象转换为字符串或 python 字典
【发布时间】:2014-05-16 22:27:51
【问题描述】:

作为API call 的结果,我得到<type 'unicode'> 的以下对象:

{"From":"en","Translations":[{"Count":0,"MatchDegree":100,"MatchedOriginalText":"","Rating":5,"TranslatedText":"Cómo estás"}]}

但是当我尝试用simplejson_loads() 解析它时,我得到了这个错误:

simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我该如何处理这种对象?

EDIT II:JSON 是正确的。让事情变得混乱的是字符串开头的 BOM。试图用.encode('utf-8-sig') 摆脱它会产生错误

UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 2: ordinal not in range(128)

但在 this discussion 的某个地方,我找到了适合我的解决方案:

if u.startswith(u'\ufeff'):
  u = u[1:]

我很想摆脱它并快乐起来。

【问题讨论】:

  • 无法复制。 import json; json.loads(u'that string') 给了我预期的dict
  • @roippi 你是对的。它看起来像一个编码问题。我用更多信息编辑了这个问题......

标签: python unicode python-unicode


【解决方案1】:

尝试仅解析 JSON,无论第一个 { 和最后一个 } 之间的内容。

如果这还不够,请告诉我们更多细节。

【讨论】:

  • 我不确定你的意思。我确实尝试解析整个事情,即从第一个 { 和最后一个 } 开始,我报告了我得到的错误。 API 响应中只有那个 JSON。
【解决方案2】:

试试这个:

import asp

foo = ast.literal_eval(your_result)

这会将 unicode 对象转换为 python 字典,这是您的解决方案吗?

【讨论】:

  • literal_eval() 有效(以及 json.loads() ),但前提是我先删除 BOM。原来这是所有问题的根源......
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 2011-03-16
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2023-04-01
  • 2020-03-13
相关资源
最近更新 更多