Python 中使用 string-escape 将带转义的字节码字符串转换为 utf-8 字符串

本文详细阐述了解决Intel Edison设备搜索Wi-Fi功能时,中文Wi-Fi名称以十六进制字节码形式显示的问题。通过正确使用decode方法并指定参数string-escape,实现了将转义字符还原为正常显示的中文字符。文章总结了调试过程中的三大问题,包括数据复制测试方法不当、基础知识不足及思维局限性,并强调了多看书、多学习的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在调试 Intel Edison 上搜索 Wi-Fi 功能时,遇到一个问题,当搜索到的 Wi-Fi 名称带有中文时,代码中获取到的字符串是十六进制字节码的形式,如 \x91\xb8 这样的。但当我进入断点查看时,看到的结果是像这样: \\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe6\\x89\\x8b\\xe6\\x9c\\xba。很明显这是 \ 字符被转义了。我尝试直接通过 decode 方法转换编码,但是不行;直接 print 出来倒是可以得到正常的十六进制字节码的形式,但这不是我想要的;然后又尝试使用 replace 方法替换掉 \\,事实证明这个思路就是错误的,所有尝试方法的结果如图:
这里写图片描述
这里写图片描述

困惑了很久,最终求教于高手,高手点拨后,问题得以解决,原来是可以直接使用 decode 方法的,只是传入的编码参数需要指定为 string-escape,才能正常转码,如图:
这里写图片描述

解决问题之后,经过总结,发现我在这次调试过程中暴露了三大问题:

  1. 不应该直接将 \\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe6\\x89\\x8b\\xe6\\x9c\\xba 复制到交互环境里测试,因为此时复制进去的内容,不是,或者说不能确保是内存中的正确形式。要调试这样的编码问题,一般来说应该将内容保存进一个文本文件,写最小应用进行调试。
  2. 基础知识不足,看的书太少,没有真正理解数据在计算机中的表示形式,导致闷头乱撞,浪费时间。
  3. 思考问题时局限性太大,思路放不开,钻进牛角尖出不来。在事实证明当前道路走不通的情况下应该及时转变思考方向,避免浪费时间。

最终深刻体会了一个已经看过很多遍的道理:不懂不可怕,可怕的是压根不知道。


多看书,多学习,多思考,多总结。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值