读书人

解决Zxing扫描中文的有关问题

发布时间: 2012-08-30 09:55:54 作者: rapoo

解决Zxing扫描中文的问题

最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..发现扫条形码没有问题..但是扫描二维码的时候却有一部分是乱码..或者不是中文的问题..于网上参考了很资料.但效果还是不太理想..后来发现只要以ISO-8859-1的格式来编码,取出结果再进行相应的转换..问题就解决了.并不需要修改源码:以下是修改的方法

第一:先在CaptureActivity类中设置它的默认编码

?

  • decodeFormats?=?null;??
  • characterSet?=?"ISO-8859-1";?

    第二:你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理的

  • public?class?ResultActivity?extends?Activity?implements?OnClickListener{??
  • ??
  • ????private?TextView?dec_result;??
  • ????private?String?resultStr;??
  • ????private?ImageView?codeImage;??
  • ????private?Button?returnChoujiang,returnJubao;??
  • ????@Override??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.dec_result);??
  • ????????init();??
  • ????????dec_result=(TextView)findViewById(R.id.dec_result);??
  • ????????codeImage=(ImageView)findViewById(R.id.code_image);??
  • ????????Intent?intent=getIntent();??
  • ????????resultStr=intent.getStringExtra("result");??
  • ????????String?UTF_Str="";??
  • ????????String?GB_Str="";??
  • ????????boolean?is_cN=false;??
  • ????????try?{??
  • ????????????System.out.println("------------"+resultStr);??
  • ????????????UTF_Str=new?String(resultStr.getBytes("ISO-8859-1"),"UTF-8");??
  • ????????????System.out.println("这是转了UTF-8的"+UTF_Str);??
  • ????????????is_cN=IsChineseOrNot.isChineseCharacter(UTF_Str);??
  • ????????????//防止有人特意使用乱码来生成二维码来判断的情况??
  • ????????????boolean?b=IsChineseOrNot.isSpecialCharacter(resultStr);??
  • ????????????if(b){??
  • ????????????????is_cN=true;??
  • ????????????}??
  • ????????????System.out.println("是为:"+is_cN);??
  • ????????????if(!is_cN){??
  • ????????????????GB_Str=new?String(resultStr.getBytes("ISO-8859-1"),"GB2312");??
  • ????????????????System.out.println("这是转了GB2312的"+GB_Str);??
  • ????????????}??
  • ????????}?catch?(UnsupportedEncodingException?e)?{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ??????????
  • ??????????
  • ????????Bitmap?bm=intent.getParcelableExtra("IMG_return");??
  • ????????if(is_cN){??
  • ????????????dec_result.setText(UTF_Str);??
  • ????????}else{??
  • ????????????dec_result.setText(GB_Str);??
  • ????????}??
  • ????????codeImage.setImageBitmap(bm);??
  • ??????????
  • ????????returnChoujiang.setOnClickListener(this);??
  • ????????returnJubao.setOnClickListener(this);??
  • ????}??

    第三:以下就是判断是否在Unicode编码里

  • public?class?IsChineseOrNot?{??
  • ??????
  • ????public?static?final?boolean?isChineseCharacter(String?chineseStr)?{????
  • ????????char[]?charArray?=?chineseStr.toCharArray();????
  • ????????for?(int?i?=?0;?i?<?charArray.length;?i++)?{???????
  • ????????????//是否是Unicode编码,除了"?"这个字符.这个字符要另外处理??
  • ????????????if?((charArray[i]?>=?'\u0000'?&&?charArray[i]?<?'\uFFFD')||((charArray[i]?>?'\uFFFD'?&&?charArray[i]?<?'\uFFFF')))?{????
  • ????????????????continue;??
  • ????????????}??
  • ????????????else{??
  • ????????????????return?false;??
  • ????????????}??
  • ????????}????
  • ????????return?true;????
  • ????}????
  • ??????
  • ????public?static?final?boolean?isSpecialCharacter(String?str){??
  • ????????//是"?"这个特殊字符的乱码情况??
  • ????????if(str.contains("???")){??
  • ????????????return?true;??
  • ????????}??
  • ????????return?false;??
  • ????}??
  • }??

    ?


    最后这样就解决了ZXing的中文乱码问题.

    ?

    ?

  • 读书人网 >移动开发

    热点推荐