我從數據庫查詢中讀取一個值,該值生成一個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