我有一个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字节编码字符串的最佳做法是什么?
答案 0 :(得分:1)
UTF-16-BE编码的字符串每个代码单元必须有两个字节(因此名称为16位)。 UTF-8有单字节,但UTF-16没有。
你的评论建议你得到一个字符串,你需要弄清楚每个字符是一个,两个还是多个字节,但这没有意义。你需要知道字符串的编码才能理解它 - 否则就是猜测。
答案 1 :(得分:0)
使用chardet package猜测编码