如何在python中转义字符串“\ x0a \ xfd \ x .....”?

时间:2017-06-22 23:57:29

标签: python string utf-8 byte

我是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 ...

谁知道如何控制这些数据的解决方案?

2 个答案:

答案 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")