首页 > 安全资讯 >

Android 技术总结(008)—— 解决ZXing扫描二维码出现中文乱码的问题

12-08-22

1、先在CaptureActivity类中设置它的默认编码。[java]decodeFormats = null;characterSet = "ISO-8859-1";2、你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理。[java]public c...

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;   
    }   
}   

相关文章
最新文章
热点推荐