如何确定字节是utf8还是utf16

2024-05-16 19:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试通过套接字接收数据。这将是一个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)

它将转换一半的数据将打印桌面-它不会解码的另一半。你知道吗


Tags: 方法dataisasciiutfprintdecodex00