(轉載)[Android開發]zxing掃描結果亂碼

來源:互聯網
上載者:User

標籤:extra   ble   except   his   資料   override   save   contain   res   

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的中文亂碼問題.

(轉載)[Android開發]zxing掃描結果亂碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.