UnicodeDecodeError:'ascii'编解码器...在尝试编码JavaScript的结构时

时间:2012-12-26 02:00:18

标签: javascript python python-2.7 python-unicode

我正在尝试用python结构创建一个unicode字符串。我不想使用python的默认字符串转换方法,因为我希望这个unicode字符串在特定的结构中,以便我可以在javascript客户端中使用它。我在行

处获得了UnicodeDecodeError
dlist_str += unicode(item[key])

我试过

# -*- encoding: utf-8 -*-

位于文件顶部。我也用

尝试了问题
dlist_str += item[key]

希望str类型自动转换为unicode。我做错了什么?

以下是代码段:


def convertToString(dlist):
  dlist_str = u'{ '
  for item in dlist:
    dlist_str += item['field_id'] + u': { '
    for key in item:
      dlist_str +=  key + u': '
      dt = str(type(item[key]))
      if dt == "<type 'str'>" or dt == "<type 'unicode'>":
        dlist_str += u"'"
        dlist_str += unicode(item[key])
        dlist_str += u"'"
      elif dt == "<type 'list'>":
        dlist_str += u"["
        for dn in item[key]:
          dlist_str += u"'" + dn + u"',"
        dlist_str += u"]"
      else:
        dlist_str += unicode(item[key])
      dlist_str += u','
    dlist_str += u'},'
  dlist_str += u'}'
  return dlist_str

1 个答案:

答案 0 :(得分:3)

看起来你正在尝试一次做两件事:将列表转换为字典,然后JSON对其进行编码。

如果将这两个步骤分开,则应该能够使用JSON Encoder in the Python Standard Library

import json

def convertToString(dlist):
    temp_dict = dict((item['field_id'], item) for item in dlist)
    return json.dumps(temp_dict)
    # or, even shorter, and in Python 2.7/3.2+
    # return json.dumps({item['field_id']: item for item in dlist})

另外,您在版本中看到错误的原因是您需要明确选择“from”编码而不是让Python猜测。类似的东西:

dlist_str += item[key].decode('utf-8')

可能会奏效。