当前位置: 代码迷 >> Android >> Android 技术总结(008)—— 解决ZXing扫描二维码出现中文乱码的有关问题
  详细解决方案

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

热度:27   发布时间:2016-05-01 15:12:59.0
Android 技术总结(008)—— 解决ZXing扫描二维码出现中文乱码的问题

1、先在CaptureActivity类中设置它的默认编码。

    decodeFormats = null;      characterSet = "ISO-8859-1";  
2、你在取回结果的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);          }  
3、判断是否在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;          }      }  



  相关解决方案