• 解决Zbar引入二维码扫描出现乱码问题


    首先声明,我也是网上看到这解决方法

     1、 具体的原理就是Zbar在扫描选取编码过程中选取编码不匹配造成乱码,而Zbar里面有3中编码,SJIS、ISO8859-1、UTF-8,在扫描选取的时候我们字需要更改其选取解码顺序

      所以下面将进行ZBar源码的修改

    首先从http://zbar.sourceforge.net/download.html下载最新的源码, 我下载时最新的为0.10

    然后我在代码zbar/qrcode/qrdectxt.c中发现了BOM, 读了一下这个.c文件, 基本思想应该是在里面同时用了

      /*This is the encoding the standard says is thedefault.*/

     latin1_cd=iconv_open("UTF-8","ISO8859-1");

      /*But this one is often used, as well.*/

     sjis_cd=iconv_open("UTF-8","SJIS");

      /*This is a trivial conversion just to check validitywithout extra code.*/

     utf8_cd=iconv_open("UTF-8","UTF-8");

    接着

       enc_list[0]=sjis_cd;

       enc_list[1]=latin1_cd;

       enc_list[2]=utf8_cd;

    然后下面接着对这三种情况都执行解码, 最后选出一种zbar觉得合适的返回给调用者, 如果zbar选择错了,那么就出现了不想看到的乱码, 所以在这里只需要干涉一下这个选择顺序即可。

     最后再进行terminal编译生成一个新的libzbar.a直接使用就可以了 (另一篇文章将会讲到如何如何在terminal中进行编译)

    转载:http://blog.csdn.net/longlongago2000/article/details/7594735

    2、解决ZBar 乱码不需要静态库
      在自己的应用中调用下面的代码处理下获取的string即可

    // 识别扫描后的信息类型
        NSString *symbolStr = symbol.data;
        
        // zbar是日本人开发的,需要将默认的日文编码改为UTF8,否则扫描“坑爹”和“尼玛啊”等会出现乱码
        if ([symbolStr canBeConvertedToEncoding:NSShiftJISStringEncoding])
        {
            symbolStr = [NSString stringWithCString:[symbolStr cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
        }

  • 相关阅读:
    石子归并
    【性能测试工具】- ApacheBench
    如何提问
    HTTP 0.9 / 1.0 / 1.1
    【NO.3-1】Jmeter
    【有意思的BUG】未名
    【FlashPlayer】-Debug版本-开发人员推荐
    【NO.1】Jmeter-安装JDK- 配置Jmeter运行的环境
    【IP限制】验证是否限制了境外IP访问权限
    【有意思的BUG】视频连接超时
  • 原文地址:https://www.cnblogs.com/bu779783251/p/3247445.html
Copyright © 2020-2023  润新知