(转载)[Android开发]zxing扫描结果乱码
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的中文乱码问题.
最新文章
- nodejs中npm常用命令
- js中对象 类 实例的区别 数据类型 创建对象
- stm8s103 PWM
- java 的面向对象
- Centos6.4安装erlang并配置mysql数据库
- 利用Android Studio、MAT对Android进行内存泄漏检测
- 5个开发人员不应该错过的最好跨平台PHP编辑器
- SQL:认识数据库约束
- Windows常用命令使用总结
- [Javascript] Advanced Reduce: Additional Reducer Arguments
- 你知道自己执行的是哪个jre吗?
- JFreeChart的使用(转)
- StringMVC @RequestMapping method属性
- Three.js学习笔记04--纹理
- 洛谷 P4302 【[SCOI2003]字符串折叠】
- hdu 1527 (威佐夫博弈)
- Vue学习(4)
- clickhouse安装使用文档
- 谷歌AMP和百度MIP是什么鬼?
- sass - 公用方法封装