ZXing扫描二维码出现中文乱码的有关问题
ZXing扫描二维码出现中文乱码的问题最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功
ZXing扫描二维码出现中文乱码的问题
最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..发现扫条形码没有问题..但是扫描二维码的时候却有一部分是乱码..或者不是中文的问题..于网上参考了很资料.但效果还是不太理想..后来发现只要以ISO-8859-1的格式来编码,取出结果再进行相应的转换..问题就解决了.并不需要修改源码:以下是修改的方法
第一:先在CaptureActivity类中设置它的默认编码
?
[java]?view plaincopy
- decodeFormats?=?null;??
- characterSet?=?"ISO-8859-1";??
第二:你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理的
[java]?view plaincopy
- 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编码里
[java]?view plaincopy
- 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的中文乱码问题.