android扫一扫 二维码显示结果中文乱码

来源:互联网 发布:盐城软件开发培训 编辑:程序博客网 时间:2024/05/14 15:01

最近再做一个android扫码器,虽然在网上找到了google Zxing扫码器,但是中文乱码,下面的方法完美的解决了我的问题
原址:[http://blog.csdn.net/yu413854285/article/details/7061462]

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

decodeFormats = null;characterSet = "ISO-8859-1";

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

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编码里

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