標籤:extra ble except his 資料 override save contain res
ZXing掃描二維碼出現中文亂碼的問題
最近項目的功能需要用到掃描二維碼.就參考了google的開源項目ZXing..功能完成後..發現掃條碼沒有問題..但是掃描二維碼的時候卻有一部分是亂碼..或者不是中文的問題..於網上參考了很資料.但效果還是不太理想..後來發現只要以ISO-8859-1的格式來編碼,取出結果再進行相應的轉換..問題就解決了.並不需要修改源碼:以下是修改的方法
第一:先在CaptureActivity類中設定它的預設編碼
[java] view plaincopy
decodeFormats = null;
characterSet = "ISO-8859-1";
第二:你在取回結果的Activity中轉換相應的編碼.這裡我是在ResultActivity類裡作處理的
[java] view plaincopy
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編碼裡
[java] view plaincopy
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開發]zxing掃描結果亂碼