您的位置:首页 > 移动开发 > Android开发

iPhone ZBar库 中文乱码解决方法

2012-10-19 09:55 148 查看
zbar下载主页,有源码 http://zbar.hg.sourceforge.net/hgweb/zbar  http://sourceforge.net/p/zbar/code/ci/default/tree/

或者:http://download.csdn.net/detail/ydj213/4810522

原文地址:http://blog.sitetuan.com/index.php/2012/05/21/iphone-zbar库-中文乱码解决方法/

iPhone 下可以使用的 一维码、二维码 开源库有 ZXing 和 ZBar ,其中 zxing 主要是针对 Android 系统开发的,对 iPhone 支持很弱,所以 ZBar 是 iPhone 下最好的选择。

ZBar 有个问题,对于中文二维码的支持经常出现乱码。ZBar 缺省支持 SHIF-JIS, UTF-8, ISO8859-1 ,但是不支持 GB18030,而很多生成的二维码都是 GB18030 (或者 GBK, GB2312)的,所以 ZBar 解码出来就直接乱码了,最近开发 回首二维码 就遇到了这个问题。(回首二维码 下载

这个修改其实很简单,只需要修改一个文件就可以了,见下面代码。

zbar/qrcode/qrdectxt.c

int qr_code_data_list_extract_text(const qr_code_data_list *_qrlist,
                                   zbar_image_scanner_t *iscn,
                                   zbar_image_t *img)
{
  iconv_t              sjis_cd;
  iconv_t              utf8_cd;
  iconv_t              latin1_cd;
  const qr_code_data  *qrdata;
  int                  nqrdata;
  unsigned char       *mark;
  int                  ntext;
  int                  i;
  qrdata=_qrlist->qrdata;
  nqrdata=_qrlist->nqrdata;
  mark=(unsigned char *)calloc(nqrdata,sizeof(*mark));
  ntext=0;
  /*This is the encoding the standard says is the default.*/

// 重点在这里,我们不要 ISO8859-1,直接换成 GB18030 就可以了
  //latin1_cd=iconv_open("UTF-8","ISO8859-1");
  latin1_cd=iconv_open("UTF-8","GB18030");

  /*But this one is often used, as well.*/
  sjis_cd=iconv_open("UTF-8","SJIS");
  /*This is a trivial conversion just to check validity without extra code.*/
  utf8_cd=iconv_open("UTF-8","UTF-8");


latin1_cd=iconv_open("UTF-8","ISO8859-1");
sjis_cd=iconv_open("UTF-8","GB2312");
utf8_cd=icon_open("UTF-8","UTF-8");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息