Android 技術總結(008)—— 解決ZXing掃描二維碼出現中文亂碼的問題

1、先在CaptureActivity類中設置它的默認編碼。

[java]
decodeFormats = null;   
characterSet = "ISO-8859-1";   
2、你在取回結果的Activity中轉換相應的編碼.這裡我是在ResultActivity類裡作處理。
[java] 
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);   
    }   
3、判斷是否在Unicode編碼裡
[java] 
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;   
    }   
}   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *