2011-07-14 30 views
3

python 2.7觀察str對象center方法的這種奇怪的行爲 -麻煩使用str.center()與Unicode字符

>>> print '-'.center(5,'.')  # '-' is the minus or hyphen key on the keyboard. 
..-..        # correctly centered 
>>> print '─'.center(5, '.')  # '─' is NOT the minus or hyphen key on the keyboard. 
.─.        # incorrectly centered 

這是center方法的實現中的錯誤或有事情做與使用unicode字符?
我該如何解決這個問題?

[請注意,這工作完全正常的python 3.2]

+1

您是否嘗試過「─」?您使用的字符是UTF-8中的3個字節。 – geoffspear

+0

'u「─」'工作。謝謝。但我想知道這種奇怪行爲的原因。發佈作爲答案,我會upvote它 –

回答

3

在Python 2,還有的strunicode類型之間的區別。 A str是一系列字節,並使用未修改的引號創建。您的'─'正在創建一個3字節的序列,顯示爲一個unicode字符;當您要求str.center()將這些字節置於5字節寬的字段中時,它會在任一側添加單個字節;打印時只能得到3個字形。

如果創建unicode對象(u'─'或「─'.decode(」 UTF-8' )),現在有1個Unicode字符的序列,這將通過將2個字符向任一側的中心。

Python 3沒有這個問題,因爲普通字符串是unicode字符序列。

2
print '─'.decode('utf-8').center(5, '.') 

# returns: '..─..' 
+0

我可以知道這種奇怪的行爲時不使用'decode'(即爲什麼它給出不正確的輸出,而不是給出錯誤)的原因? –

+0

它不會以你想要的方式解釋'─'。 – eumiro