如何将esp.flash_read()转换为字符串

时间:2019-08-28 14:47:44

标签: esp8266 micropython

我有以下代码:

  buff=esp.flash_read(esp.flash_user_start(),50)
  print(buff)

我从打印得到以下输出: bytearray(b'{“ ssid”:“ mySSID”,“ password”:“ myPASSWD”} \ xff \ xff \ xff \ xff \ xff \ xff')

我想做的是获取buff中的json。正确的“ Python方式”是什么?

1 个答案:

答案 0 :(得分:0)

buff是Python bytes object,如print开头的b'输出所示。要将其转换为字符串,您需要对其进行解码。

您可以在标准Python中使用

buff.decode(errors='ignore')

请注意,如果不指定errors=ignore,则会得到一个UnicodeDecodeError,因为\xff字节在默认编码UTF-8中无效。大概它们正在填充,而您想忽略它们。

如果在ESP8266上可以使用,那就太好了!但是,来自MicroPython文档的this建议该关键字语法可能未实现-我没有ESP8266对其进行测试。如果不是,那么您可能需要自己删除填充字符:

textLength = find(buff, b'\xff')
text = buff[0:textLength].decode()

或简单地:

text = buff[0:buff.find(b'\xff')].decode()

如果decode也未实现,而online MicroPython interpreter中也没有实现,则可以使用str

text = str(buff[0:find(buff, b'\xff')], 'utf-8')

在这里,您必须明确指定要从UTF-8解码(或指定的任何编码)。

但是,如果您真正想要的是JSON中编码的值,则应该能够使用json模块将它们检索到dict中:

import json
j = json.loads(buff[0:buff.find(b'\xff')])
ssid = j['ssid']
password = j['password']