2015-10-23 4 views
0

Я готовил простой пример скрипта Python для своих учеников, и я решил бороться за решение следующей проблемы. Я использую кодировку utf8, потому что я хочу, чтобы они использовали польские символы, например. Ł, ±, ś. Теперь скрипт должен взять имя от пользователя и напечатать его в прямоугольнике, сделанном из *. Так это то, что я хочу, чтобы показать им:Подсчет символов UTF8 с помощью Python

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, так как с и признаки вычисляются как два , Можно ли вызвать функцию len(), чтобы вычислить ее как 1?

+0

У python 3 нет этих проблем, с которыми вы сталкиваетесь в python2. Все строки являются юникодами в python3, а len работает правильно. – LetzerWille

ответ

1

декодировать данные из utf8 в объект Юникод. Затем получите len юникода.

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

В Python 2. * использовать decode:

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

Вместо hardcoding на '' utf-8 ''было бы лучше использовать' sys.stdin.encoding'. –

0

Вы используете str, когда вы должны использовать unicode

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

'unicode' является избыточным,' decode' уже производит Unicode. –

Смежные вопросы