1

我正在尝试从 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

4

1 回答 1

3

看起来您正在尝试同时做两件事:将列表转换为字典,然后对其进行 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')

可能会工作。

于 2012-12-26T02:13:43.613 回答