Проверьте строку, если это Юникод, какой стандарт UTF и длина его в байтах?

Мне нужно проверить, является ли строка Unicode, а затем, если это UTF-8. После этого получите длину строки в байтах, включая спецификацию , если она когда-либо ее использует. Как это можно сделать в Python?

Также для дидактических целей, как выглядит представление списка байтов строки UTF-8? Мне любопытно, как строка UTF-8 представлена ​​в Python.

Последнее редактирование: pprint делает это довольно хорошо.

3 Solutions collect form web for “Проверьте строку, если это Юникод, какой стандарт UTF и длина его в байтах?”

try: string.decode('utf-8') print "string is UTF-8, length %d bytes" % len(string) except UnicodeError: print "string is not UTF-8" 

В Python 2 str представляет собой последовательность байтов, а unicode – последовательность символов. Вы используете str.decode для декодирования последовательности байтов в unicode и unicode.encode для кодирования последовательности символов на str . Так, например, u"é" – это строка unicode, содержащая единственный символ U + 00E9 и также может быть написана u"\xe9" ; кодирование в UTF-8 дает последовательность байтов "\xc3\xa9" .

В Python 3 это изменяется; bytes – это последовательность байтов, а str – последовательность символов.

Чтобы проверить, работает ли Unicode

 >>>a = u'F' >>>isinstance(a, unicode) True 

Чтобы проверить, является ли это UTF-8 или ASCII

 >>>import chardet >>>encoding = chardet.detect('AA') >>>encoding['encoding'] 'ascii' 

Я определенно рекомендую Joel Spolsky's The Absolute Minimum Каждый разработчик программного обеспечения, абсолютно уверен, должен знать о Unicode и наборах символов (никаких оправданий!) , Если вы еще этого не читали.

Для Python Unicode и механизмов кодирования / декодирования, начните здесь . Чтобы получить длину байта строки Unicode, закодированной в utf-8, вы можете сделать:

 print len(my_unicode_string.encode('utf-8')) 

Ваш вопрос помечен как python-2.5, но имейте в виду, что это немного изменилось в Python 3+.

Python - лучший язык программирования в мире.