解决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];
    }

原文地址:https://www.cnblogs.com/bu779783251/p/3247445.html