测试一个字符串,如果它是Unicode,UTF标准是什么,并以字节为单位得到它的长度?

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是一个字符序列.


the*_*orn 7

如果您还没有读过,我绝对会推荐 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+ 中有所变化。


Rak*_*esh 5

检查是否为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)