问题
将字符串 r"\xc4\xe3\xba\xc3" 变成bytes类型的 b"\xc4\xe3\xba\xc3"
背景
众所周知 string和bytes格式之间 可以使用encode(编码) decode(解码)来相互转换
方法说明:https://www.runoob.com/python/att-string-decode.html
例子如图:
通过encode,decode我们可以将数据在两种格式间转换
但是 现在碰到了特殊的情况
已知一个字符串 x=r"\xc4\xe3\xba\xc3" 如何把这个乱码的字符串变成能够识别的[你好]呢
简而言之 我们的目的是
将字符串 r"\xc4\xe3\xba\xc3" 变成bytes类型的 b"\xc4\xe3\xba\xc3"
【注】:
字符串前的r,b
r"…": 作用是防止字符串转义 比如\n \t 等 如果不加r 会被自动转义
u"…":意为该串为bytes类型
方法
因为得到的是一个bytes格式的str类型数据
所以能够解析这个str类型 手动拼凑成bytes
\x 代表着16进制编码 我们可以将十六进制的值取出
z = r"\xc4\xe3\xba\xc3"
l = z.split(r"\x")[1:]
此时获得了一个包含十六进制字符串的list
将这些字符串拼接 并转化为bytes
zbytes = bytes.fromhex("".join(l))
此时的zbytes 就等于 b"\xc4\xe3\xba\xc3"
然后进行解码
print(z)
print(l)
print(zbytes)
print(zbytes.decode('gbk'))
就可以得到这一串乱码的值了
输出如下
至此 通过将字符串r"\xc4\xe3\xba\xc3" 分割,截取,并重新合并生成bytes 最终可以decode出我们想要的【你好】
PS: 如果有更好更快更简单的方法 也希望大家能够不吝赐教 留言交流 谢谢!~