我是Python3用户。我现在面临一些关于字节到字符串控制的问题..
首先,我从一些服务器获取数据作为字节。
[字节数据]:b'\ xaaD \ x12 \ x1c + \ x00 \ x00 \ x18 \ x08 \ x00 \ x00 \ x88 \ xb4 \ xa2 \ x07 \ xf8 \ xaf \ xb6 \ x19 \ x00 \ x00 \ x00 \ X00 \ x03Q \ xfa3 / \ X00 \ X00 \ X00 \ X1D \ X00 \ X00 \ X00 \ X86 = \ XBD \ xc9〜\ x98uA> \ XDF#= \ x9a \ XD8 \ XDB \ X18 \ x1c_ \ x9c \ XC1 \ XE4 \ XB4 \ XFC;'
此数据不会转义任何字符串类型,例如utf-8,unicode-escape ...
谁知道如何控制这些数据的解决方案?
答案 0 :(得分:1)
正如@MrE所说,您需要使用bytes.decode
方法。或者,您可以为str()
初始化函数提供编码。您可以按以下方式忽略错误,但仍会产生乱码:
>>> x = b'\xaaD\x12\x1c+\x00\x00 \x18\x08\x00\x00\x88\xb4\xa2\x07\xf8\xaf\xb6\x19\x00\x00\x00\x00\x03Q\xfa3/\x00\x00\x00\x1d\x00\x00\x00\x86=\xbd\xc9~\x98uA>\xdf#=\x9a\xd8\xdb\x18\x1c_\x9c\xc1\xe4\xb4\xfc;'
>>> x.decode("UTF-8", errors="ignore")
'D\x12\x1c+\x00\x00 \x18\x08\x00\x00\x07\x19\x00\x00\x00\x00\x03Q3/\x00\x00\x00\x1d\x00\x00\x00=~uA>#=\x18\x1c_;'
但正如你所说,你不知道编码所以从this question获取一些提示,我循环使用可用的编码,但没有看到任何可理解的信息,例如。
>>> for c in codec_list:
... try:
... print(str(x, c, errors="ignore"))
... except:
... pass
...
D+ Q3/ =~uA>#=_;
枋+ 揣灝 Q3/ =褕~uA>#=嵫_鍵渝;
枋+ 揣灝 Q3/ =褕~A>#=_銧;
¡à h©s8®¶ é³ f¨I=qÍ ÿªQû¬æAU©Ü
ד h©s8®¶ י³ f¨I=qאQ¬AU©
¬D+ ê┤ó°»╢ Q·3/ å=╜╔~ÿuA>▀#=Ü╪█_£┴Σ┤ⁿ;
...
然后我看了通用字符编码检测模块,chardet,也在上面链接,但找不到任何东西:
>>> import chardet
>>> chardet.detect(x)
{'encoding': None, 'confidence': 0.0, 'language': None}
所以,您可能需要了解一下如何获取数据chardet documentation has some simple, useful examples。
答案 1 :(得分:0)
您需要解码字节数据:
byte_data.decode("utf-8")