UnicodeDecodeError: 'ascii' codec...尝试为 JavaScript 编码结构时



我正在尝试从Python结构中创建一个Unicode字符串。我不想使用Python的默认字符串转换方法,因为我希望此Unicode字符串处于特定的结构中,以便可以在JavaScript客户端中使用它。我在line

上得到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

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

如果将两个步骤分开,则应该能够在Python标准库中使用JSON编码器:

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})

单独看到版本中的错误的原因是,您需要明确选择"从"编码而不是让Python猜测。类似:

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

可能会起作用。

最新更新