如何确定字节是utf-8还是utf-16

时间:2019-05-21 17:21:00

标签: python python-3.x

我正在尝试在套接字上接收数据。根据发送给我的内容,它将混合使用UTF-8和UTF-16。我试图找到一种方法来检测它是否为UTF-8 / UTF-16,但遇到了问题。

data = b"\x00D\x00E\x00S\x00K\x00T\x00O\x00P\x00-\x00\x15\x04\x19\x04\x19\x04'\x04\x13\x04\x14\x04\x14\x04\x00\x00"

def is_ascii(s):
    return all(ord(c) < 128 for c in s)

def print_to_screen(data):
    if is_ascii(str(data)):
        print("RECV 8: " + data.decode())
    else:
        print("RECV 16: " + data.decode('utf-16'))

数据应为:DESKTOP-ЕЙЙЧГДД

它总是像UTF-8一样打印。我不确定是否需要更改is_ascii或寻找另一种方式来做我正在做的事情。

编辑:

data = b"D\x00E\x00S\x00K\x00T\x00O\x00P\x00-\x00\x15\x04\x19\x04\x19\x04'\x04\x13\x04\x14\x04\x14\x04\x00\x00"

try:
    data = data.decode('utf-8')
except:
    data = data.decode('utf-16')

print(data)

它将转换将打印DESKTOP-的一半数据,而不会解码另一半。

1 个答案:

答案 0 :(得分:0)

可能您可以使用chardet库尝试类似的操作。

import chardet 
the_encoding = chardet.detect('string')['encoding']

就是这样!