解决Zxing扫描中文的有关问题
解决Zxing扫描中文的问题最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..
解决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的中文乱码问题.?
?