Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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 - последовательность символов.

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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