开发者使用AT进行开发时,发布如下的json时,经常会出现ERROR:
→ AT+MPUB="data",0,0,“{“test”:1}”
← ERROR
那么为什么出现这个问题呢?实际上时因为payload的双引号有误导致的。一般,写代码时,遇到这种情况,我们都使用如下方式规避:
> a = "abc".."cef\"ghi\"jkl"
> print(a)
abccef"ghi"jkl
#但是,AT开发怎么办呢?
同样的,我们也应该转义——使用\22代替所有payload的双引号。
→ AT+MPUB="data",0,0,“{\22test\22:1}”
有的开发者可能不太理解,为什么是\22呢?实际上很简单啦,十六进制hex转十进制是34,ascii表中,34对应的就是双引号啦。
> print(tonumber("22", 16))
34
> print(string.char(34))
"
#问题又来了,单片机端C代码中如何生成\22呢?
如果使用字符串,字符串内对\也需要转义处理,例如”\\22″才表示\22三个字节的字符串。