我正在尝试从Python结构中创建一个Unicode字符串。我不想使用Python的默认字符串转换方法,因为我希望此Unicode字符串处于特定的结构中,以便可以在JavaScript客户端中使用它。我在line
上得到Unicodedecodeerrordlist_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')
可能会起作用。