解决Zxing扫描中文的有关问题
解决Zxing扫描中文的问题
最后这样就解决了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的中文乱码问题.