Python 确定具有起始字节的项的编码
我最近遇到了这个字符串:Python 确定具有起始字节的项的编码,python,Python,我最近遇到了这个字符串:b'\xd5\xa3Lk\xd4\xad\xaeH\xb8\xae\xab\xd8EL3\xd1RR\x17\x0c\xea~\xfa\xd0\xc9\xfeJ\x9aq\xd0\xc57\xfd\xfa\x1d}\x8f\x99?*\xef\x88\x1e\x99\x8d\x81t`1\x91\xebh\xbh\xc5\xc5\xe9d\xb7\x85\e\xb9X想解码它吗。 现在我知道,使用python和string.decode()可以实现这一点,但它需要编码。如
b'\xd5\xa3Lk\xd4\xad\xaeH\xb8\xae\xab\xd8EL3\xd1RR\x17\x0c\xea~\xfa\xd0\xc9\xfeJ\x9aq\xd0\xc57\xfd\xfa\x1d}\x8f\x99?*\xef\x88\x1e\x99\x8d\x81t`1\x91\xebh\xbh\xc5\xc5\xe9d\xb7\x85\e\xb9X想解码它吗。
现在我知道,使用python和string.decode()
可以实现这一点,但它需要编码。如何确定解码此字符串的编码?我先前对您问题的评论部分准确,部分错误。根据以下文件:
如果没有外部信息,就不可能可靠地确定用于编码字符串的编码。每个字符映射编码都可以对任意随机字节序列进行解码。然而,这在UTF-8中是不可能的,因为UTF-8字节序列具有不允许任意字节序列的结构
因此,您应该尝试使用“utf-8-sig”进行解码(对于字节顺序标记或BOM可能作为前3个字节出现的一般情况,您的示例并非如此,因此您可以使用“utf-8”)。但是如果失败了,就不能保证您知道使用试错解码使用的是什么编码,因为根据上述文档,尝试使用另一个编解码器解码可能会成功(并可能给您带来垃圾)。如果“utf-8”解码成功,则可能是使用的编码。见下文
s='abcde'
打印(s.编码('utf-32')。解码('utf-16'))
打印(s.编码('cp500')。解码('latin-1'))
印刷品:
a b c d e
�����
当然,“utf-8”编码也将成功解码使用“ascii”编解码器编码的字符串,因此存在这种不确定性。解码到什么?可打印文本?如果它是一个实际的二进制blob,并且没有“隐藏”文本或编码需要确定怎么办?假设它是unicode编码的,(你怎么会相信呢?),除了尝试用不同的编码(例如“utf-8”、“utf-16”等)对它进行解码之外,我不相信有任何方法可以确定它是如何编码的直到你找到一个不会导致解码错误的。事实上,我从一个旧的被破坏的whatsapp会话中检索到一个base64 cookie,并对它进行了解码。现在我以这一块字节结束,并想打印它的实际含义。你可以循环所有可用的编码,并尝试每一个,看看哪些不会失败,并且有意义。你可以从中复制列表。明白了。但最终,这只是一大团废话:)