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

  • 相关阅读:
    python数据类型详解
    python代码风格指南:pep8 中文翻译
    尝试一下: 仅加密已用磁盘空间
    Anaconda多环境多版本python配置指导
    Python科学计算(一)环境简介——Anaconda Python
    Python Collections里一些常用字典类的用法
    旋转链表
    Java 利用 split 方法切割字符串
    Java 语言设计中的部分共享策略
    JumpGame I
  • 原文地址:https://www.cnblogs.com/bu779783251/p/3247445.html
Copyright © 2011-2022 走看看