JSONKit解析Unicode字符\u0000内容出错的总结
近来在搞一个名片识别的app,在测试过程中,经常出现返回结果为空的错误。一直以为是识别不到名片的问题,纠缠了几天,突然在一天晚上注意到原来识别是没问题,问题是出现在json内容分析上。一下茅塞顿开了。痛恨醒悟得太晚了。 如下面识别到的名片内容: {"code":"0","result":"123adikd","name":["詹建忠"],"title":["u0000"],"mobile":["13751234632"],"tel":["4008840063","29800399","02029809322"],"degree":[],"dept":[],"comp":["广州东湖汽车"],"addr":["口:转乘经停大冲口的公空车,下车后过马路即到)","广州市荔湾区芳村大道东166号t地铁1号线A1出"],"post":[],"mbox":[],"htel":[],"fax":["02081565638"],"email":[],"web":["gzpeugeot.com"],"im":[],"numOther":[],"other":[],"extTel":[]}因为之前一直是使用JSONKit来解析json数据,鉴于它的简单高效,从一开始接触就爱上了它,并且长期的占用着,一刻也不离开。 以上数据解析出来结果为空(nil)。因为代码判断到结果为空,则提示识别错误,所以在测试过程中,有几张名片一直提示识别错误,但有另外一些名片却能识别到,所以出现了连续几天无比抓狂的痛苦。这下好了,原来症结是在json解析上。简单分析了一下json数据,觉得应该是title节点的问题,即:"title":["u0000"]。另外写了行代码直接使用JSONKit解析这段内容,去掉引号内的u0000后,重新运行,解析正确,内容不再为nil。狂喜了一秒后陷入了深思之中,u0000是(char)0的Unicode编码,理论上应该是空才对,为啥JSONKit碰到这个会解析不到呢? google之,在github上作者解释了这个问题,说这个是内容提供的错误,不符合标准的内容,所以他不认为这个是自己的错误,这个是内容提供者的问题。 作者的原话如下: In this particular case,these services are very clearly "in the wrong".RFC 4627is unambiguous that characters < 详见这里:https://github.com/johnezang/JSONKit/pull/26 继续搜索,找了一篇解决办法的文章,是通过修改JSONKit代码来避开这个错误,但替换代码试了,发现不行。 文字如下:http://ixhan.com/2012/04/jsonkit-illegal-unicode-escape-sequenc/ 本想试试用SBJson来解析是否能成功,但无奈网络巨慢,下载不到framework。就改成用Xcode自带的NSJSONSerialization试了下,可以解析成功的。解析出来的内容是"title": [""],也就是空字符。 试了一些在线的json解析器,上面这段json内容,解析器都可以解析成功。看来很多情况下标准和现实还是有点差距,偶尔也要为了迁就现实而要去妥协,先将标准摆一边去了,不然吃苦头的只有是自己了。看来这个道理在比较纯洁的代码世界也不能避免啊。O(∩_∩)O哈哈~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |