2015-01-26 5 views

ответ

6

decode ваши байты строка (в соответствии с любой кодировкой это в, UTF-8 может быть) - len результирующей строки Unicode является то, что вы после этого.

Если факт лучшие практики для декодирования входов, как можно скорее, дело только с реальным текстом (т.е. unicode, в Python 2, это именно так, как обычные строки, в Python 3) в вашем коде, и если необходимо, encode так же, как вы снова выводите.

Байт-строки должны обрабатываться в вашей программе, только если речь идет о байтовых строках (например, управление или мониторинг некоторых аппаратных устройств, & c) - гораздо больше программ связано с текстом, и, кроме того, за исключением случаев,/O, они должны иметь исключительно дело с текст строки (пишется unicode в Python 2 :-).

Но если вы хотите сохранить s в виде байтовой строки тем не менее,

len(s.decode('utf-8')) 

(или любой другой кодирующая вы используете для представления текста в виде байтовых строк) все равно должны делать то, что вы спрашиваете.

2

Используйте юникод строку

s = 'הוא אוסף אתכם מחר בשלוש וחצי.' 
    len(s) #52 
    s = u'הוא אוסף אתכם מחר בשלוש וחצי.' 
    len(s) #29 
+0

я получаю 'неподдерживаемых символов в input'. –

+0

Я этого не понимаю. –

+0

Может быть, вещь Python 2? –

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