您的位置:首页 > 其它

iPhone ZBar库 中文乱码解决方法--重新编译libzbar.a

2012-10-19 10:39 676 查看
zbar下载主页,有源码 http://zbar.hg.sourceforge.net/hgweb/zbar  http://sourceforge.net/p/zbar/code/ci/default/tree/
或者:http://download.csdn.net/detail/ydj213/4810522

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

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

zbar/qrcode/qrdectxt.c

Objective-C

intqr_code_data_list_extract_text(constqr_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;

  constqr_code_data  *qrdata;

  int                  nqrdata;

  unsignedchar      *mark;

  int                  ntext;

  int                  i;

  qrdata=_qrlist->qrdata;

  nqrdata=_qrlist->nqrdata;

  mark=(unsignedchar*)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");

下面的问题来了,我们下载的iphone zbar sdk 里并没有这个文件,只有libzbar.a

这就需要我们用源码重新编译libzbar.a

latin1_cd=iconv_open("UTF-8","ISO8859-1");
sjis_cd=iconv_open("UTF-8","GB2312");
utf8_cd=icon_open("UTF-8","UTF-8");


1、在这个问题上我走了弯路,搞了一天都在尝试用terminal编译一对c代码包,后来发现我下载的项目有问题。可用的下载地址如下
http://zbar.hg.sourceforge.net/hgweb/zbar/zbar/file/146b857ff41a
将这个文件包下载下来,我的文件夹名字是:zbar-146b857ff41a,打开这个文件夹,找到iphone文件夹,如下用xcode打开zbar.xcodeproj



这时候我编译会报错因为libzbar.a还没有编译成功。examples文件夹下的实例项目会报错,我索性把这个文件夹删掉。这样就可以编译成功了。我用的是xcode4.4.1

2、按上面所说的修改/src/zbar/qrcode/qrdectxt.c文件

3、这里选择这个


4、Xcode导航product->Edit Scheme



好了现在编译就行了

5、


编译前libzbar.a文件是红色的,编译成功后是黑色的

6、右击这个文件选择Show in Finder,就能在Finder中找到这个文件了

参考了孤狼吠月的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息