2013-03-03 39 views
1
def inp(text): 
    tmp = str() 
    arr = ['.' for x in range(1, 40 - len(text))] 
    tmp += text + ''.join(arr) 
    print tmp 

s=['tester', 'om', 'sup', 'jope'] 
sr=['тестер', 'ом', 'суп', 'жопа'] 
for i in s: 
    inp(i) 
for i in sr: 
    inp(i) 

輸出:蟒蛇不正確的格式西里爾

tester................................. 
om..................................... 
sup.................................... 
jope................................... 

тестер........................... 
ом................................... 
суп................................. 
жопа............................... 

爲什麼Python中不正確地處理西里爾?行結束並不是直的,而且很糟糕。使用格式也一樣。這怎麼可以糾正?感謝

回答

2

閱讀:

基本上,你在text參數inp功能是一個字符串。在Python 2.7中,字符串默認是字節。在例如編碼時,Cyrilic字符未被映射到1-1到字節。 utf-8編碼,但需要多於一個字節(在utf-8中通常爲2),所以當你做len(text)時,你不會得到字符數,而是字節數。

爲了獲得字符的數量,你需要知道你的編碼。假設這是UTF-8,您可以將文本解碼到編碼和將打印正確的:

#!/usr/bin/python 
# coding=utf-8 
def inp(text): 
    tmp = str() 
    utext = text.decode('utf-8') 
    l = len(utext) 
    arr = ['.' for x in range(1, 40 - l)] 
    tmp += text + ''.join(arr) 
    print tmp 

s=['tester', 'om', 'sup', 'jope'] 
sr=['тестер', 'ом', 'суп', 'жопа'] 
for i in s: 
    inp(i) 
for i in sr: 
    inp(i) 

重要的線是這兩個:

utext = text.decode('utf-8') 
    l = len(utext) 

,你首先解碼文本,從而導致一個unicode字符串。之後,您可以使用內置的len來獲取字符長度,這正是您想要的。

希望這會有所幫助。

+0

非常感謝。準確和詳細的迴應。再次感謝你。 – Spouk 2013-03-03 10:49:40

+0

@Spouk當然,很高興幫助! – 2013-03-03 21:39:39