首页 > 解决方案 > 如何将 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方式”是什么?

标签: esp8266micropython

解决方案


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']

推荐阅读