【发布时间】:2012-12-26 02:00:18
【问题描述】:
我正在尝试从 python 结构中创建一个 unicode 字符串。我不想使用 python 的默认字符串转换方法,因为我希望这个 unicode 字符串具有特定的结构,以便我可以在 javascript 客户端中使用它。我在
行得到了 UnicodeDecodeErrordlist_str += unicode(item[key])
我试过了
# -*- encoding: utf-8 -*-
在文件的顶部。我也用
尝试了问题行dlist_str += item[key]
希望 str 类型会自动转换为 unicode。我做错了什么?
这里是sn-p的代码:
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
【问题讨论】:
-
# -*- encoding: utf-8 -*-用于允许 vim/emacs 读取您的代码,仅考虑utf-8编码。请发布确切的输出,以及对函数convertToString的调用,这样我们就可以很好地解决您的问题。 (辛普森一家) -
@Rubens:不正确。
-*- encoding: utf-8 -*-的特定格式是对 emacs 的提示(Vim 将使用模式行,例如vim: fileencoding=utf-8),但 Python 确实使用coding: utf-8部分来指示文件是 UTF-8而不是 ASCII;如果您将 Unicode 字符不在文件内的 ASCII 范围内,例如λ,如果你没有coding: utf-8,它将导致SyntaxError,但如果你这样做,它将正常工作。见PEP 263。但请记住,这只是 source 编码。 -
@ChrisMorgan 是的,vim/emacs 之间的差异很小,但是在脚本中添加这样的东西只涉及代码,而不涉及代码处理的数据。
-
str(type(x)) == "<type 'str'>"?请不要。使用type(x) == str(精确类型匹配)或isinstance(x, str)(允许子类)。要一次性覆盖str和unicode,您将拥有isinstance(x, basestring)。 -
@Rubens:我的观点很简单,它确实也影响了 Python 的行为,尽管不是以希望的方式。
标签: javascript python python-2.7 python-unicode