Edu*_*scu 17 python string unicode utf-8 python-2.5
我需要测试一个字符串是否是Unicode,然后测试它是否是UTF-8.之后,获取字符串的长度(以字节为单位),包括BOM,如果它曾经使用过.如何在Python中完成?
同样出于教学目的,UTF-8字符串的字节列表表示是什么样的?我很好奇如何在Python中表示UTF-8字符串.
后期编辑:pprint做得非常好.
eca*_*mur 27
try:
string.decode('utf-8')
print "string is UTF-8, length %d bytes" % len(string)
except UnicodeError:
print "string is not UTF-8"
Run Code Online (Sandbox Code Playgroud)
在Python 2中,str是一个字节序列,unicode是一个字符序列.您str.decode用来解码字节序列unicode,并将unicode.encode字符序列编码为str.例如,u"é"是包含单个字符U + 00E9的unicode字符串,也可以写入u"\xe9"; 编码为UTF-8给出了字节序列"\xc3\xa9".
在Python 3中,这是改变的; bytes是一个字节序列,str是一个字符序列.
如果您还没有读过,我绝对会推荐 Joel Spolsky 的《每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!)》 。
对于 Python 的 Unicode 和编码/解码机制,请从这里开始。要获取以 utf-8 编码的 Unicode 字符串的字节长度,您可以执行以下操作:
print len(my_unicode_string.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
您的问题被标记为 python-2.5,但请注意,这在 Python 3+ 中有所变化。
检查是否为Unicode
>>>a = u'F'
>>>isinstance(a, unicode)
True
Run Code Online (Sandbox Code Playgroud)
检查它是UTF-8还是ASCII
>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
Run Code Online (Sandbox Code Playgroud)