0
我知道在Python 2 unicode錯誤是一團糟,但我不明白的是爲什麼str.format
將它們引入到其他工作情況。我是有一些Unicode字符的麻煩,並測試出IDLE了我:爲什麼使用str.format創建unicode錯誤?
>>> s = u'\xef'
>>> print s
ï
>>> print "%s" % s
ï
>>> print '' + s
ï
>>> print '{}'.format(s)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)
似乎str.format
就是這是一個問題的唯一例子。我猜測,不知何故該函數正在做一個壞的假設,只是通過ascii適當的字符串,但我想知道我怎麼能處理這最好的結果是不穩定的。
這似乎只發生在unicode字符串時,無論是使用實際字符還是代碼。這兩種選擇視爲純字符串,做工精細:
>>> s = 'ï'
>>> print '{}'.format(s)
ï
>>> s = '\xef'
>>> print '{}'.format(s)
ï
>>> s = u'ï'
>>> print '{}'.format(s)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)
這不是一個「壞的假設」 - 這是歷史。如果您在引入良好的Unicode支持之前使用字符串類型和方法,那麼您將得到錯誤的Unicode編碼支持。如果您想要很好的Unicode支持,請使用Python 3,或者非常小心地始終在Python 2中使用unicode類型。 –