2015-10-23 70 views
0

我一直在爲我的學生準備一個Python腳本的簡單示例,並且我發現很難解決以下問題。 我使用utf8編碼,因爲我希望他們使用波蘭字符,例如 Ł,±,ś。現在,該腳本應該從用戶那裏獲取姓名,並將其打印在由*所組成的矩形中 。所以這是我想向他們展示什麼:使用Python計算UTF8字符

imie=raw_input('Podaj swoje imię: ') #Give your name 

dl=len(imie) 

print '*'*(dl + 4) 
print '*' + ' '*(dl + 2) + '*' 
print '* ' + imie + ' *' 
print '*' + ' '*(dl + 2) + '*' 
print '*'*(dl + 4) 

的問題是,對於名稱,如Antoś Mąka,該dl變量的值應該是11,但它是13,因爲S和體徵是作爲兩個計算。 是否可以強制len()函數將其計算爲1?當你應該使用unicode

imie = unicode(raw_input('....').decode('utf-8')) 
+0

python 3沒有這些問題,你在python2中遇到。所有的字符串都是python3中的unicode,而len的工作原理恰到好處。 – LetzerWille

回答

1

解碼數據從UTF8到一個Unicode對象

dl=len(imie.decode("utf-8")) 
1

在Python 2 *使用decode。然後獲取unicode的len。

imie=raw_input('Podaj swoje imię: ').decode('utf8') #Give your name 
dl=len(imie) 
print dl 
+0

使用'sys.stdin.encoding'會更好,而不是硬編碼到''utf-8「'。 –

0

您使用str

+1

'unicode'是多餘的,'decode'已經產生Unicode。 –