解决Zxing扫描中文的问题

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

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

 

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

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

[java]   view plain copy
  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 plain copy
  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的中文乱码问题.

 

 

你可能感兴趣的:(zxing)