Python string,bytes 直接转换 r"\xc4\xe3\xba\xc3"(str) 变为 b"\xc4\xe3\xba\xc3"(bytes) 非直接解码/编码

问题

将字符串 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: 如果有更好更快更简单的方法 也希望大家能够不吝赐教 留言交流 谢谢!~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值