JSONKit解析Unicode字符\u0000内容出错的总结

易语言-易语言json编码解析模块 易语言json编码解码模块源码 三叶学习网 立即下载

近来在搞一个名片识别的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 4627 is unambiguous that characters < 0x20are verboten. In cases like there, where something is clearly violating the standard, my default response is that "It's the other persons (web service) problem." The standard is the standard, and it is Right(tm), even its mistakes.

详见这里: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哈哈~

易语言JSON模块:STJson2.3(开源+示例) - 纯算法 2.3 优化多线程支持。 修复了负数解析是出现的“解析数值出错”错误。 优化了多线程的支持。去除了所有“打开内存文件”改用 快速字节集对象。 2.2 加入二次寻址机制。 当存在 路径 和 句柄 参数时,如果 句柄 大于 0,而且路径也存在时,则基于 句柄 执行二次寻址。 2.1 修复了逻辑型和NULL类型取值和取文本出错的问题。 修复了上个版本取逻辑和null文本出错和取值内容不正确的问题(忘记标记数据位置了,惭愧)。 2.0版本特性。 加入了全新的快速解析对象,解析效率提高了5到10倍。 全新的解析算法全面兼容JSON标准。完全支持科学计数法、Unicode、JSON标准转义符、单行多行注释、多字节文本。 读取支持路径式访问并且效率非常高。例如:a.b、a[1].b、[1].b、['我'].b。需要注意的是,数组访问索引是从1开始的。 快速解析对象加入中文命名代理类。 修复上个版本双精度小数的问题。 原来的对象解析部分挂接了新的解析对象,效率更高,兼容性更好。 已经通过大量的测试,修复了上个版 立即下载

相关推荐

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 374

去掉mysql u0000_js对于\u0000的处理

\u0000是unicode表示的一个特殊字符,也就是二进制的0,在c里面用这个字符作为字符串结束的标志。正是因为这个原因,造成调用某些方法的时候字符串被截断。例子:id="ff">var x = 'xxx\u0000yyy';alert(x);alert(x.length);var elm = document.getElementByIdx('ff');elm.value = x;y =...

weixin_33046983的博客 3424

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3172

std::string转json时多了\u0000【jsoncpp库】

std::string转json时多了\u0000【jsoncpp库】

最快的脚步不是跨越,而是继续;最慢的步伐不是缓慢,而是徘徊! 6939

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

文章目录一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、遇到的问题 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 一、卸载node 如果你已经安装了node,那么你需要先卸载node,如果你没有安装那直接跳过这一步到下一步。 打开控制面板 -> 打开程序和功能 -> 右上角搜索输入node -> 右键卸载 为了确保彻底

HuangsTing的博客 41万+

Feko仿真GPS微带天线学习笔记

为了优化方便,使参数变量化,所以定义几个变量在CADFEKO左侧浏览器中如图所示定义变量,如下表贴片的尺寸切角尺寸feed =-6.4馈电点距坐标原点的距离sub_w=45基板的宽度sub_d=45基板的长度sub_h=5基板的高度epsR=5.6介电常数损耗角正切。

qq_36521926的博客 3988

Java基础之字符常量

       表示一个字符,一个字符常量要用一对英文半角格式的单引号(' ')引起来,它可以是英文字母、数字、标点符号、以及由转义序列来表示的特殊字符。 'a' '1' '&amp;' '\r' '\u0000'        '\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示是因为,Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在U...

from_heat的博客 1万+

利用ArcGIS快速生成等高线边界,完成地形图拼图

地形图边界一般在CAD中手动绘制,然而,一幅边缘复杂的地形图边界的绘制需要花费大量时间和精力,为了减少重复性工作,提高效率,用ArcGIS软件可以自动生成实测地形图的边界

yl14774636230的博客 9068

不能被复制的字符:'/u0000'

不能被复制的字符:'/u0000'。

ituuz的专栏 7263

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 264

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5526

JavaScript处理Unicode的‘\u0000‘截断字符串问题

JavaScript处理Unicode的’\u0000’ 开发中遇到这样一个问题,前台调用后台数据。返回的id值是Unicode编码的。JS 在识别的时候会自动变成‘ 0 1’,如何去除空字符使之变成不被截断的字符串?解决方法如下: //返回的数据 let str = '\u00000\u00001' console.log(str) //' 0 1' //我们的预期 得到连续的字符串 ‘01’ //使用正则对空字符进行处理 str = str.replace(/[^0-9]/ig,"") cons

typhoonpython的博客 5238

AI驱动的网络安全运维:智能化时代的安全保障

本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。

Echo_Wish 1290

ios jsonkit 报错_iOS关于JSONKit解析Unicode字符内容出错,问题出在\u0000

JSONKit虽然很强大,但是一些特殊的Unicode,比如\u0000是无法解析的。在github上作者解释了这个问题,说这个是内容提供的错误,不符合标准的内容,所以他不认为这个是自己的错误,这个是内容提供者的问题。作者的原话如下:In this particular case, these services are very clearly "in the wrong". RFC 4627 i...

weixin_35173650的博客 501

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

string转json多了\u0000

json用于传递网络请求确实方便,有些错误也是很奇怪,\u0000 是怎么来的?

xiaopang_love_study的博客 1781

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

查询SqlServer数据库char(0)特殊字符转换为JSON的问题:\u000

问题描述 在Python通过pymssql查询SqlServer数据库数据时,如果是该列包含char(0)特殊字符时,将该字符转换为JSON时会转换为\u000导致将JSON解析插入到PG数据库时报错,如下: ### Cause: org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 解决方法 将该字段做以下处理:首先转换字符集,然后将char(0)替换为’’ REPLACE(co

Expec-乐的博客 1537

java转义json出现\u0000 等乱码处理思路

今天遇到了String乱码怎么都去不了的问题,最后的解决方法很简单,也不是方法的问题,是数据过滤之后进行的数据处理,在处理阶段生成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的方法,在这里记录一下。 在将中文数据转成json格式的时候,碰到了很多char型直接显示出来的,比如\u0000, \u201d, \u201c 首先我想到的是我的数据筛选出现了问题,于是去...

zyh568879280的博客 2万+

JSON:JavaScript 对象表示法

JSON:JavaScript 对象表示法(JavaScriptObjectNotation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 /* * JSON * - JS中的对象只有JS自己认识,其他的语言都不认识 * - JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别, * ...

weixin_30553837的博客 217

记得一次被坑一天的特殊字符^@、\u0000

今天一天被特殊字符^@、\u0000,坑的不要不要的。在页面上和日志上,根本看不出来,简直吐血。直到登录服务器,使用vim命令看日志,才看出效果。

山鬼谣的专栏 1424

idea中出现‘/u0000‘字符的报错

其实特别好解决,直接上操作: 1、打开报错的文件中鼠标右键后点击Show in Explorer 2、选择该文件使用Edit with Notepad++打开 3、打开后再把这些null给删除就可以了(注意这里的超级记事本的编码格式要调为UTF-8) ...

apple_50165509的博客 2418

spring-webmvc-4.1.6 接口返回json数据 中文出现\u0000\u0000\u0000\u0000

spring-webmvc-4.1.6 接口返回json数据 中文出现\u0000\u0000\u0000\u0000 这是什么鬼,调试了好长时间也找出问题来,中文输入一般情况下没有问题,只有几篇文档会出现这种情况,以为是文档里什么隐含的特殊字符导致的,各种尝试,一个个字复制的尝试,都不好使,时好时坏,真是急人呀。

黄爱岗廊坊师范学院信息技术提高班 第七期 3万+

JSONKit无法解析Unicode字符\u0000

JSONKit无法解析一些特殊的Unicode,比如\u0000。在github上作者解释了这个问题,他说这个是内容提供的错误,不符合标准的内容,所以他不认为这个是自己的错误,这个是内容提供者的问题。作者的原话如下:In this particular case, these services are very clearly “in the wrong”. RFC 4627 is unambigu

王天泽的博客 1227

Java的基本数据类型与对应的包装类型

u代表是一个Unicode字符,0000表示空字符。

swlimuhao的博客 495

js正则表达式

创建 字面量创建方式 实例创建方式 var reg = /pattern/flags // 字面量创建方式 var reg = new RegExp(pattern,flags); //实例创建方式 //pattern:正则表达式 //flags:标识(修饰符) //标识主要包括: //1. i 忽略大小写匹配 //2. m 多行匹配,即在到达一行文本末尾时还会继续寻常下一行中是否与正则匹配的项 //3. g 全局匹配 模式应用于所有字符串,而非在找到第一个匹配项时停止 描述字符 根据正

极客神殿 1175
上一篇: 查找iOS项目中是否使用了UDID
下一篇: 解决Xcode5.1编译ZXing出错的问题
sing_sing
博客等级 码龄20年 209粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值