zbar的安装和使用参见大神博客:http://blog.csdn.net/xiaxiazls/article/details/49822321

该类识别条形码以及纯英文的二维码效果很好,但是如果是整张图片(二维码只占一部分 )无法正常识别,另外如果是含有中文的话,识别出来的中文字符是乱码,仅仅通过utf8转gbk是不行的。

在正文开始之前先吐槽一下网上的“QRcodeDecoder”工程或者工具。网上传的代码都是2008年的,它也许是能够识别一些二维码,但是我是没有看到正确的识别结果的,其中的算法可以借鉴,但是然并卵。

笔者要识别的二维码中含有的中文字符是 “曹慧君”,简单使用zbar识别出来的是“²Ü»Û¾ý”,如果转UTF8则变成“虏脺禄脹戮媒”,这都是什么鬼?三个字符为什么会变成6个字符呢?如果你想通过简单的UTF8 GBK UNICODE转换得到正确的字符,那就是“痴心妄想”(因为笔者就是在这一条路上浪费了很多的时间)。

万般无奈之下,笔者静下心来,仔细学习了解了UTF8 UNICODE GBK包括BASE64编码(网上有说是base64编码,但是base64编码之后都是可见的字符和数字,不可能出现这些诡异的字符,所以不可能是base64位的)的原理和特点,以及之间的转换。后来一想,这些字符在计算机中只不过是二进制的数据,仔细看一下这些字符的二进制编码不就能够得到启发吗?

“²Ü»Û¾ý”对应的十六进制为:(省略了0x)32 a8 69 3f 3f 3f

“曹慧君”对应的十六进制为:                        b2 dc bb db be fd

至此,我们的输入和输出已经确定,怎么进行这样一个转变。

先看看utf8的原理,输入的二进制编码中(00110010 10101000  01101001  00111111  00111111  00111111)并没有110开头的,所以他也不可能是utf编码的字符。

另外“曹慧君”gbk转utf8得到的字符是“Ӝܛ߽ ” utf8 的曹慧君编码是:“e5 90 9b 20 0d 0a  ”

“²Ü»Û¾ý”通过utf8 转 gbk得到的刚好是“虏脺禄脹戮媒”。

然后我们再看一下曹慧君的Unicode编码       66 fa 6167 541b 看起来也并没有什么关联。

暂时没有什么头绪,于是使用程序将“²Ü»Û¾ý”转成unicode试一下:

在程序中,通过utf-8 转Unicode中看到 三个中文字符的编码为“178 220 187 219 190 253”这是十进制的,178对应的十六进制是 b2,于是看到了希望,全部转换为十六进制之后为:“b2 dc bb db be fd ” 这不正是 “曹慧君”对应的gbk编码吗?瞬间是不是有点混乱的感觉。为什么经过转unicode之后就变成了所需要的gbk编码呢?

逆向推理的话,二维码编码时,是将gbk的编码当成unicode进行utf8编码进行保存的。所以解码时需要将之转换成unicode然后直接当成gbk的编码。这也许就是RawByte格式的解码方式吧。

当然,本次中文解码是针对RawByte格式的二维码编码方式的,如果是其他具体情况,还要具体分析。只要是获得了字符的各种编码,就在不断的尝试中进行试验吧,反正编码的方式并不多,转换也就那么几种,总是能够得到我们需要的解码方式的。只要深入到编码内部,就不愁解决不了问题,怕就怕害怕麻烦,不愿意自己深入了解,只是一味去copy别人的代码确实很难解决问题,因为我们面临的问题和别人的未必相同,所以要对症下药啊。

使用Zbar进行二维码识别 中文字符解码 RawBytes相关推荐

  1. Linux OpenCV + zBar 实现二维码识别

    第一个版本 参考:https://blog.csdn.net/pyt1234567890/article/details/109597353 特点:实现简单.但局限于亮度 清晰度好,没有扭曲变形的情况 ...

  2. 二维码识别 基于stm32 ov7725

    二维码识别 基于stm32 ov7725 二维码识别技术在我们的生活中应用的很方便了,但基本都是基于手机的,目前在公交车上也存在了扫描二维码的机器,上次坏了之后,发现一只小企鹅,原来是基于linux的 ...

  3. 基于ZBar,OpenCV和Python的二维码识别

    0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...

  4. python实现二维码识别软件_OpenCV和Zbar两个Python模块实现二维码和条形码识别

    在我们的日常生活中,处处可见条形码和二维码. 在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码:你去你们学校的自助机上借书还 ...

  5. Jetson nano 摄像头二维码识别 Opencv zbar QT

    环境以及前言 环境 jetson nano Linux ubuntu 18.4 QT版本 QT5.98 摄像头 Csi摄像头 Opencv Jetson nano 自带的-.- 应该是4.1?不太清楚 ...

  6. 更强大的二维码识别工具zBar

    <OpenCV系列教程> 项目位置:OpenCV-Sample 代码位置:102-ScannerQRCodeWithZbar.py OpenCV自带的二维码识别工具,能力较差,尤其是在如下 ...

  7. Opencv+Zbar二维码识别(二维码校正)

    二维码和车牌识别基本都会涉及到图像的校正,主要是形变和倾斜角度的校正,一种二维码的畸变如下图: 这个码用微信扫了一下,识别不出来,但是用Zbar还是可以准确识别的~~. 这里介绍一种二维码校正方法,通 ...

  8. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

  9. python zxing 识别条码_Python zxing 库解析(条形码二维码识别)

    各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 Zbar 首先试了一下Zbar,python加载ZBar时各种报错.可能的原因是zbar的dll文件是32位的,而我系 ...

  10. iOS 花式二维码生成和二维码识别

    iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个 ...

最新文章

  1. Redis学习笔记~Redis在windows环境下的安装
  2. input type 属性
  3. 网络编程练习 -- NSURLConnection -- get/post请求
  4. FreeSql (十七)联表查询
  5. why do we use process keys
  6. pandas读写csv
  7. Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc
  8. DotText源码阅读(2)-工程、数据库表结构
  9. linux lsnrctl命令不存在,linux – oracle lsnrctl TNS-12545:连接失败,因为目标主机或对象不存在...
  10. 计算机的显卡控制面板在哪里,nvidia控制面板在哪,详细教您如何进入英伟达控制面板...
  11. 加密卡华为怎么模拟_华为手机NFC模拟加密的门禁卡详细教程
  12. 关联分析:Apriori算法
  13. 机智云IOT软件平台受邀参展STM32全国巡回研讨会/中国电信天翼智能生态博览会/签署“5G+天翼云+AI”战略合作
  14. 英文字体设计标志需要注意什么?
  15. JetBrains全家桶(IDEA、Pycharm等各个产品)在国内高速下载地址
  16. datagridview更新到数据库视频教程地址
  17. 如何混淆JavaWeb代码
  18. [转载]Ajax的错误处理机制探讨
  19. 软件测试02:软件测试的定义和目的
  20. 2022年5月9日-10日 复盘计划

热门文章

  1. 【好文】敏捷中国十八年目睹之怪现状
  2. iphone计算机删除键,苹果电脑Mac中delete键的七种用法
  3. Linux capability初探
  4. SegmentFault 社区访谈 | Linxz:只会写 CSS 不会写 JS 的“伪”前端
  5. MySQL分库分表总结及面试案例
  6. 使用富盛Sbo-Addon程序开发框架轻松开发模态单据选择查询功能实例
  7. 论文总结:云安全研究方向及进展综述
  8. antd table分页每页中文设置
  9. z-blogPHP在西部数码虚拟主机上遇到WTS-WAF错误拦截情况,协商好久他们还是妥协了...
  10. 一个测试反应速度的小游戏