小程序关于JSON解析时UnicodeU+2028等字符的bug

微信小程序,微信公开课,小程序关于JSON解析时UnicodeU+2028等字符的bug 微信公开课

微信公开课小程序热门讨论关于「小程序JSON解析时UnicodeU+2028等字符的bug」的小程序开发问题
补充:小程序JSON解析时UnicodeU2028等字符的bug,概述wxrequest对于含有U2028等字符的ResponseBody存在错误的过度处理(注意该问题只在真机上复现)经过查找文章和社区,我发现这是一
展开:问题模块框架类型问题类型API组件名称终端类型微信版本基础库版本API和组件小程序Bugwxrequest客户端673240概述wxrequest对于含有U+2028等字符的ResponseBody存在错误的过度处理(注意:该问题只在真机上复现)经过查找文章和社区,我发现这是一个反馈较多的问题(参见最后“可能的相关问题”部分),对于特殊字符很多人选择了进行过滤,但这是不对的,正确的做法应当是对其进行合理编码、解码JSON对特殊字符的处理在详细描述bug之前,我们先了解下JSON处理中特殊字符的正确处理方式在ECMAscript51(https:wwwecmainternationalorgecma26251sec15122)中有这样一句话:JSONusesamorelimitedsetofwhitespacecharactersthanWhiteSpaceandallowsUnicodecodepointsU+2028andU+2029todirectlyappearinJSONStringliteralswithoutusinganescapesequence这意味着JSONstringify和JSONparse都不应当对空格、U+2028、U+2029这三个字符进行转义,例如对于空格:可以看到空格未进行转义,同样的道理,U+2028也不会被转义:但对于 ,是需要转义的:因此可以得出结论,在HTTPResponse中U+2028等字符是不应当被转义的;由于这两个字符被创造也是有其含义和目的,更不应当被过滤掉(如https:developersweixinqqcomcommunitydevelopdoc8d93389c3bea4acff6e7bb765c3e634f?highLine=2028和https:developersweixinqqcomcommunitydevelopdocf085c4b5f547113dbb032d0f4b46e1b5)wxrequest的问题在wxrequest对JSON的处理中,没有正确将JSONString解析为Object,而是将String进行了返回,同时将U+2028和U+2029两个字符替代成了 在这一过程中存在如下问题:假设wxrequest处理JSON异常,应当触发fail回调函数传递具体的错误,给用户明确的意图,而不是调用success给出未能成功解析的字符串(举一个例子,JSONparse结果并不一定是Object,如http:wwwmockyiov25bea7d792f0000df0bda3a4e这个接口在浏览器用fetch调用返回的就是字符串)wxrequest应当能正常处理含有U+2028等字符的Response,应当原样保留这些特殊字符并反馈JSONparse出的结果但是通过调试可以发现,wxrequest对U+2028等字符进行了错误的处理,在返回的String中将其替换成了 (注意不是\n,前者是一个字符,后者是两个字符),这进一步导致了用户难以通过JSONparse手动解析String数据:在上面的例子中我说过 是应该被转义为\n的,否则在JSONparse的时候就会造成报错预期表现wxreqeust应该正确处理特殊字符wxrequest在JSON解析失败时应当调用fail回调临时解决方案这是一个会有bug的解决方案,原因不再赘述,仅供参考:wxrequest({url:http:xxx,success(res){constoriginData=resdata; 无法处理纯字符串的情况,慎用constdata=typeoforiginData===string?JSONparse(originDatareplace( g,\n)):originData;consolelog(data);替代resdata}});复现路径在这个代码片段中https:developersweixinqqcomsiam8hTmP7m3S,可以通过点击不同button分别调用含有 、u2028、u2029和空格的接口,查看console的输出注意:必须在真机上才能复现,模拟器不可以可能的相关问题https:developersweixinqqcomcommunitydevelopdoc8d93389c3bea4acff6e7bb765c3e634f?highLine=2028https:developersweixinqqcomcommunitydevelopdoc000ca414b64b1099bb1701ce55b800?highLine=2028https:developersweixinqqcomcommunitydevelopdoc99f032bff8b2a6ccb37ffd4414aa5575?highLine=json%25202028https:developersweixinqqcomcommunitydevelopdoc000c443ed5c488009dd6b81aa51404?highLine=2028https:developersweixinqqcomcommunitydevelopdocf085c4b5f547113dbb032d0f4b46e1b5https:developersweixinqqcomcommunitydevelopdocca057a276c3e316cb5086b0b26a69763此外这个问题反馈了U+2028与setData使用的bug,我猜测可能与本问题可能存在一定的关联性:https:developersweixinqqcomcommunitydevelopdoc000c443ed5c488009dd6b81aa51404?highLine=2028代码片段https:developersweixinqqcomsiam8hTmP7m3S
更多有关「小程序JSON解析时UnicodeU+2028等字符的bug」的讨论可以前往微信公开课小程序参与互动哦!了解更多

「小程序关于JSON解析时UnicodeU+2028等字符的bug」热门讨论订阅

微信小程序,微信公开课,小程序关于JSON解析时UnicodeU+2028等字符的bug
订阅小程序

方法1:微信扫描微信公开课小程序码即可订阅热门讨论「小程序关于JSON解析时UnicodeU+2028等字符的bug」

方法2:微信搜索微信公开课小程序名称进入,即可订阅热门讨论「小程序关于JSON解析时UnicodeU+2028等字符的bug」

方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热门讨论「小程序关于JSON解析时UnicodeU+2028等字符的bug」

微信公开课小程序热门讨论「小程序关于JSON解析时UnicodeU+2028等字符的bug」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。

微信公开课热门讨论「小程序关于JSON解析时UnicodeU+2028等字符的bug」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。