读书人

ZXing扫描二维码出现中文乱码的有关问

发布时间: 2012-07-20 10:38:30 作者: rapoo

ZXing扫描二维码出现中文乱码的问题

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

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

?

[java]?view plaincopy
  1. decodeFormats?=?null;??
  2. characterSet?=?"ISO-8859-1";??

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

[java]?view plaincopy
  1. public?class?ResultActivity?extends?Activity?implements?OnClickListener{??
  2. ??
  3. ????private?TextView?dec_result;??
  4. ????private?String?resultStr;??
  5. ????private?ImageView?codeImage;??
  6. ????private?Button?returnChoujiang,returnJubao;??
  7. ????@Override??
  8. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  9. ????????//?TODO?Auto-generated?method?stub??
  10. ????????super.onCreate(savedInstanceState);??
  11. ????????setContentView(R.layout.dec_result);??
  12. ????????init();??
  13. ????????dec_result=(TextView)findViewById(R.id.dec_result);??
  14. ????????codeImage=(ImageView)findViewById(R.id.code_image);??
  15. ????????Intent?intent=getIntent();??
  16. ????????resultStr=intent.getStringExtra("result");??
  17. ????????String?UTF_Str="";??
  18. ????????String?GB_Str="";??
  19. ????????boolean?is_cN=false;??
  20. ????????try?{??
  21. ????????????System.out.println("------------"+resultStr);??
  22. ????????????UTF_Str=new?String(resultStr.getBytes("ISO-8859-1"),"UTF-8");??
  23. ????????????System.out.println("这是转了UTF-8的"+UTF_Str);??
  24. ????????????is_cN=IsChineseOrNot.isChineseCharacter(UTF_Str);??
  25. ????????????//防止有人特意使用乱码来生成二维码来判断的情况??
  26. ????????????boolean?b=IsChineseOrNot.isSpecialCharacter(resultStr);??
  27. ????????????if(b){??
  28. ????????????????is_cN=true;??
  29. ????????????}??
  30. ????????????System.out.println("是为:"+is_cN);??
  31. ????????????if(!is_cN){??
  32. ????????????????GB_Str=new?String(resultStr.getBytes("ISO-8859-1"),"GB2312");??
  33. ????????????????System.out.println("这是转了GB2312的"+GB_Str);??
  34. ????????????}??
  35. ????????}?catch?(UnsupportedEncodingException?e)?{??
  36. ????????????//?TODO?Auto-generated?catch?block??
  37. ????????????e.printStackTrace();??
  38. ????????}??
  39. ??????????
  40. ??????????
  41. ????????Bitmap?bm=intent.getParcelableExtra("IMG_return");??
  42. ????????if(is_cN){??
  43. ????????????dec_result.setText(UTF_Str);??
  44. ????????}else{??
  45. ????????????dec_result.setText(GB_Str);??
  46. ????????}??
  47. ????????codeImage.setImageBitmap(bm);??
  48. ??????????
  49. ????????returnChoujiang.setOnClickListener(this);??
  50. ????????returnJubao.setOnClickListener(this);??
  51. ????}??


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

[java]?view plaincopy
  1. public?class?IsChineseOrNot?{??
  2. ??????
  3. ????public?static?final?boolean?isChineseCharacter(String?chineseStr)?{????
  4. ????????char[]?charArray?=?chineseStr.toCharArray();????
  5. ????????for?(int?i?=?0;?i?<?charArray.length;?i++)?{???????
  6. ????????????//是否是Unicode编码,除了"?"这个字符.这个字符要另外处理??
  7. ????????????if?((charArray[i]?>=?'\u0000'?&&?charArray[i]?<?'\uFFFD')||((charArray[i]?>?'\uFFFD'?&&?charArray[i]?<?'\uFFFF')))?{????
  8. ????????????????continue;??
  9. ????????????}??
  10. ????????????else{??
  11. ????????????????return?false;??
  12. ????????????}??
  13. ????????}????
  14. ????????return?true;????
  15. ????}????
  16. ??????
  17. ????public?static?final?boolean?isSpecialCharacter(String?str){??
  18. ????????//是"?"这个特殊字符的乱码情况??
  19. ????????if(str.contains("???")){??
  20. ????????????return?true;??
  21. ????????}??
  22. ????????return?false;??
  23. ????}??
  24. }??


?


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

读书人网 >移动开发

热点推荐