zoukankan      html  css  js  c++  java
  • 解决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];
        }

  • 相关阅读:
    【转】hadoop中map和reduce的数量设置问题
    【转】MapReduce原理与设计思想
    eclipse中svn插件在线安装方式
    redis配置文件详解
    Hibernate_Validator学习
    WebService入门实例教程
    Http状态码大全(来自菜鸟教程)
    Java编程规则
    Java和C++的对比
    Java实现OOP(面向对象编程)
  • 原文地址:https://www.cnblogs.com/bu779783251/p/3247445.html
Copyright © 2011-2022 走看看