我从数据库查询中读取一个值,该值生成一个unicode字符串。由于此处无关的原因,数据输入人员将字符串值输入到数据库中,如“Assessor's Parcel”(注意“反向”撇号)。我正在编写刚刚通过选定数据库记录并打印出文本的代码。我使用.format()操作将变量中的文本插入到打印输出中。众所周知,传递unicode字符串时.format失败。因此,减少这种对难题,我提出下面的例子:带有打印和格式的unicode字符串输出不一致()
>>> a = u"Assessor’s Parcel"
>>> a
u'Assessor\u2019s Parcel'
>>> print a
Assessor’s Parcel
>>> "{0}".format(a)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 8: ordinal not in range(128)
>>>
以上线是从的PythonWin的“交互窗口”(PythonWin的2.7.5(默认情况下,22:43 2013年5月15日,: 36)在win32上[MSC v.1500 32位(Intel)]。)
为什么'print a'产生的输出不仅仅是'a'?为什么呢,如果其中任何一个能产生合理的输出,.format()不能?
如果我确定我不能输出unicode文本(对于某些尚未知的原因),并且我会满足包含“\ u”语法的输出,那么是否真的必须包装我的所有字符串在某些代码(方法或其他)中执行转换的数据库值的输出?
必要链接http://bit.ly/unipain – Daenyth