esp8266 - 如何将 esp.flash_read() 转换为字符串
问题描述
我有以下代码:
buff=esp.flash_read(esp.flash_user_start(),50)
print(buff)
我从打印中得到以下输出: bytearray(b'{"ssid": "mySSID", "password": "myPASSWD"}\xff\xff\xff\xff\xff\xff')
我想要做的是获得 json buff。这样做的正确“Python方式”是什么?
解决方案
buff
是一个 Python字节对象,如以 .print
开头的输出所示b'
。要将其转换为字符串,您需要对其进行解码。
在标准 Python 中,您可以使用
buff.decode(errors='ignore')
请注意,如果不指定errors=ignore
,您将得到 aUnicodeDecodeError
因为\xff
字节在默认编码(即 UTF-8)中无效;大概他们正在填充,你想忽略它们。
如果这适用于 ESP8266,那就太好了!然而,来自 MicroPython 文档的这表明关键字语法可能未实现 - 我没有 ESP8266 来测试它。如果没有,那么您可能需要自己删除填充字符:
textLength = find(buff, b'\xff')
text = buff[0:textLength].decode()
或者简单地说:
text = buff[0:buff.find(b'\xff')].decode()
如果decode
也没有实现,它不在在线 MicroPython 解释器中,您可以使用str
:
text = str(buff[0:find(buff, b'\xff')], 'utf-8')
在这里,您必须明确指定您正在从 UTF-8(或您指定的任何编码)解码。
但是,如果您真正追求的是 JSON 中编码的值,您应该能够使用该json
模块将它们检索到一个字典中:
import json
j = json.loads(buff[0:buff.find(b'\xff')])
ssid = j['ssid']
password = j['password']
推荐阅读
- javascript - IE11 querySelector() 为空,但 querySelectorAll() 不是
- python - 将整个数据帧除以 100
- neo4j - Neo4j中合并子句中的冒号是什么意思?
- oracle - 将自定义类型传递给 Oracle 过程
- python - 覆盖特殊矩阵的 matmul
- python - 有没有办法为不平衡分类初始化 keras 内核?
- node.js - 将 Apollo Express 服务器部署到 Heroku 时出现问题:“缺少 GET 查询。”
- python - 在熊猫系列中数南 - 这种方式什么时候会失败?
- c - 内存泄漏 - C 中的单链表
- java - Eclipse - 创建一个新模板以添加“静态”字