二维码新闻

当前位置:首页 > 新闻 > 二维码新闻 > 为什么我的手机不能识别二维码?
行业动态 二维码知识 二维码新闻 二维码应用

为什么我的手机不能识别二维码?

作者:二维码小记者   时间:2019/5/27

今日,中午一同事突然打电话给我,大概意思就是说公司采购了一些设备,然而这些设备是需要手机APP进行控制的。手机APP需要扫描设备的二维码来绑定设备,但是二维码是在设备的包装上的,原本的包装准备替换掉,而需要生成新的二维码用激光刻蚀在设备底部。那么问题来了,为什么同样的参数,她在百度上搜索到的自动生成的二维码的网站却不能够被APP识别出来呢?

首先我想到的是对比新生成的二维码和原先设备外包装上的二维码是否一致,参数有没有缺少的。于是百度搜索解析二维码的网站,在网站上同时解析了新生成的二维码和原包装二维码信息,发现是有一点差别的,原包装上的第一个参数是,"xxx.abc.xxx",而我们生成的二维码则是abc。

当时我轻率的认为这是同事失误造成的,没想到事情远远没有这么简单。当时立马联系她说明了这个情况,但是她说即使第一个参数改成abc了之后,APP依然是无法识别的。起初我是不信的,于是我自己手动生成了一个二维码,APP依然无法识别。

这时我怀疑是生成二维码的网站有问题,于是决定自己用JAVA程序来生成二维码。第一步我先在百度搜索java中能够生成和解析二维码的jar包是哪个,很快就找到一个,但是在ali??n的maven库里下载后是不能用的,大概是时间的关系,jar的名字换了或者是其他原因,但是在看到cs?n都是收费才可以下载的正确的jar。

反正我是不会因为这种事情给他送钱的,没办法继续找,最后终于不知道哪个好人在网上上传了jar,是可以用的。


就是这个QRcode,这个jar具备了解析和生成二维码的功能,然后随便去网上复制点代码,稍微调试下能跑起来即可。就目前这种情况而言,已经不是磨磨唧唧研究代码怎么写的时候了,目的是立马找个APP不能识别二维码的原因。

第一步解析网站生成的二维码与原包装二维码,对比内容。全部是以子串类型对比的,没有任何肉眼上的差别,那么我就想,会不会是字符集不一样呢?于是我在百度上搜索手机二维码解码器字符集,也搜不到,搜到一个类似utf-8的u什么玩意的东西,程序里面根本就没有这种字符集。由此可见百度出来的内容很多也都是不可靠的,还有人瞎编字符集发到网上的。

我只能在java程序中使用各种字符集来生成二维码,GBK,GB2312,ISO8859-1,UTF-8几乎全都试过了,没有一个可以的,那么我就很纳闷了,按理说Unicode在转换的时候应该都会重新编码的把,也许不会受到字符集的影响,到这时候已经过去一个小时左右了,真的很着急了。

于是我决定将所有字符串转成2进制,然后对照一下,我挨个转成ascii码自己翻译,为什么会想到这个办法呢,这种网络工程师在解析报文的时候常用的一项技能。说干就干,先转二进制并打印内容,于是就发现蹊跷。


可以看到String部分内容是一样的,见上图,因涉及商业机密,我必须打上马赛克。至于打马赛克的部分,在我用红色框体标识出来的前面,对位是没有问题,从红色框体位置发现差别了。于是我立马换16进制,查ascii表,结果让我恍然大悟。


问题就出在回车和换行上面,那么找出问题原因了,立马修改java程序生成二维码的参数,子串换行统一使用\r,这次生成的二维码终于可以被APP识别了。

经历此事之后,总结一下的出现问题的原因以及如何规避此类问题。

APP二维码解析格式兼容问题。我认为APP的研发程序员是要承担很大一部分责任的,APP是国内一个知名的大厂研发的,甚至他有的部分会涉及到军工行业,那么这些高学历拿着高薪的人才出现这种问题是不是要反思一下。
异常信息像很多APP的报错,无论什么情况下报错都是没有错误代码的,这是很不完善的地方。至少你要告诉别人,给别人bug提示信息方便缩小故障范围。在这一点很多外国的开源软件都做的非常好,包括windows,每次蓝屏都会给你一个故障代码,即使很多人不会去留意。
接到这样的错误往往是非常着急的,很容易心慌意乱没办法冷静的思考,有时候真的会像无头苍蝇一样,比如中间对字符集的测试,这里是耽误时间了的,同事一催我的心态就比较容易崩,尤其是听到会影响量产的时候,所以说强大的心态也是一种很优秀的特质,所以说玻璃心或者经验较少的人很难做好运维。


北京京微科技有限公司专业从事二维码制作,二维码系统开发。二维码固定资产管理系统、二维码防伪系统、二维码溯源系统,二维码产品追溯系统,二维码会员系统等,咨询电话:1822287747(微信同)