Skip to main content
 首页 » 编程设计

python之解码十六进制 UTF-8 字符

2025年05月04日15langtianya

我有以下由 Apache 生成的错误代码:

\xed\xe5 \xff\xb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec 

我发现 \x 转义序列声明以下两个字符是 UTF 十六进制符号。例如,单词 HELLO 可以编码为 \x48\x45\x4C\x4C\x4F。但我似乎无法弄清楚如何解码我拥有的字符串? 我搜索了 UTF 编码表,但没有找到任何与我所拥有的编码符号相匹配的字符。我什至不知道我应该寻找一个字节还是两个字节的编码。

我在使用俄语语言环境的 PC 上,如果有帮助的话。

请您参考如下方法:

看起来你的字符串是 cp-1251 编码的:

s.decode('string_escape').decode('cp1251') 

打印一些看起来有意义的东西(除了 \xb 不正确 - 复制粘贴错误?):

s = r'\xed\xe5 \xff?xb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec' 
 
s = s.decode('string_escape').decode('cp1251') 
#не я?xbяется приложением 

I don't even know should I be looking for one byte or 2 bytes encodings.

这是chardet的地方前来救援:

import chardet 
 
s = r'\xed\xe5 \xff?xb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec' 
 
print chardet.detect(s.decode('string_escape')) 
# {'confidence': 0.99, 'encoding': 'windows-1251'} 

如果你不懂python,你也可以使用javascript,例如http://jsfiddle.net/L3Z4b/