Как обрабатывать многобайтовую строку в Python

В PHP есть многобайтовые строковые функции для обработки многобайтовых строк (например, сценарий CJK). Например, я хочу подсчитать количество букв в многобайтовой строке с помощью функции len в python, но она возвращает неточный результат (т.е. количество байтов в этой строке)

japanese = "桜の花びらたち"
print japanese
print len(japanese)#return 21 instead of 7

Есть ли в PHP пакет или функция, подобная mb_strlen?


person hungneox    schedule 01.12.2011    source источник
comment
Для полноты: это больше не проблема в Python 3 со встроенной поддержкой Unicode для всех строк.   -  person poke    schedule 01.12.2011


Ответы (2)


Используйте строки Unicode:

# Encoding: UTF-8

japanese = u"桜の花びらたち"
print japanese
print len(japanese)

Обратите внимание на u перед строкой.

Чтобы преобразовать строку байтов в Unicode, используйте decode: "桜の花びらたち".decode('utf-8')

person Petr Viktorin    schedule 01.12.2011

Попробуйте сначала преобразовать его в unicode:

print len(japanese.decode("utf-8"))

дает 7. Вы работаете со строкой в ​​кодировке utf-8, которая действительно имеет 21 байт.

person Has QUIT--Anony-Mousse    schedule 01.12.2011
comment
UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-6: порядковый номер не в диапазоне (128) :( - person hungneox; 01.12.2011
comment
Чтобы удалить ошибку: ‹br/› UnicodeEncodeError: кодек 'ascii' не может кодировать символы в позиции 0-6: порядковый номер не в диапазоне (128) :( ‹br/› Добавьте следующую хэш-строку: ‹br/› # Кодировка: UTF-8‹br/› - person agathodaimon; 29.06.2017