我需要测试一个字符串是否是 Unicode,然后它是否是 UTF-8。之后,获取字符串的长度(以字节为单位),包括BOM(如果它曾经使用过)。如何在 Python 中做到这一点?
同样出于教学目的,UTF-8 字符串的字节列表表示形式是什么样的?我很好奇 UTF-8 字符串是如何在 Python 中表示的。
后期编辑: pprint 做得很好。
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
是一个字符序列。
检查 Unicode
>>>a = u'F'
>>>isinstance(a, unicode)
True
检查它是 UTF-8 还是 ASCII
>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
我肯定会推荐 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+ 中有所改变。