Python:确定我是否有16位编码的字符串

时间:2013-12-05 23:33:29

标签: python encoding utf-8 character-encoding utf-16

我有一个UTF-16-BE编码字符串:

utf16be = '\x0623\x0631\x0646\x0628'

print repr(utf16be)
> '\x0623\x0631\x0646\x0628'

我需要知道它是1字节还是2字节编码,我尝试使用下面的代码片段:

for c in utf16be:
    c_ord = ord(c)
    if c_ord >= 256:
        print 'Its a 2-byte (or more) encoded string'
        break

但那不行,因为我认为utf16be [0]将等于'\ x0623',但它实际上等于'\ x06':

for c in utf16be:
    print repr(c)

> '\x06'
> '2'
> '3'
> '\x06'
> '3'
> '1'
> '\x06'
> '4'
> '6'
> '\x06'
> '2'
> '8'

那么检查我是否有2字节编码字符串的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

UTF-16-BE编码的字符串每个代码单元必须有两个字节(因此名称为16位)。 UTF-8有单字节,但UTF-16没有。

你的评论建议你得到一个字符串,你需要弄清楚每个字符是一个,两个还是多个字节,但这没有意义。你需要知道字符串的编码才能理解它 - 否则就是猜测。

答案 1 :(得分:0)

使用chardet package猜测编码