24

我需要测试一个字符串是否是 Unicode,然后它是否是 UTF-8。之后,获取字符串的长度(以字节为单位),包括BOM(如果它曾经使用过)。如何在 Python 中做到这一点?

同样出于教学目的,UTF-8 字符串的字节列表表示形式是什么样的?我很好奇 UTF-8 字符串是如何在 Python 中表示的。

后期编辑: pprint 做得很好。

4

3 回答 3

33
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"é"是包含单个字符 U+00E9 的 unicode 字符串,也可以写成u"\xe9"; 编码成 UTF-8 给出字节序列"\xc3\xa9"

在 Python 3 中,这发生了变化;bytes是一个字节序列,str是一个字符序列。

于 2012-08-21T10:44:57.963 回答
7

检查 Unicode

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

检查它是 UTF-8 还是 ASCII

>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
于 2012-08-21T11:10:37.240 回答
6

我肯定会推荐 Joel Spolsky 的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know about Unicode and Character Sets (No Excuses!),如果你还没有读过的话。

对于 Python 的 Unicode 和编码/解码机制,从这里开始。要获取以 utf-8 编码的 Unicode 字符串的字节长度,您可以执行以下操作:

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

您的问题被标记为 python-2.5,但请注意这在 Python 3+ 中有所改变。

于 2012-08-21T10:44:32.150 回答