关于使用ZXing扫描二维码出现中文乱码的问题

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

第一:先在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;
    }
}



最后这样就解决了ZXing的中文乱码问题.


以上只是本人在工作中解决问题的记录.并不是什么技术文档.只供本人做一个记录.

你可能感兴趣的:(android)