shell脚本
2015-09-17 09:58
411 查看
最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..发现扫条形码没有问题..但是扫描二维码的时候却有一部分是乱码..或者不是中文的问题..于网上参考了很资料.但效果还是不太理想..后来发现只要以ISO-
8859
-
1
的格式来编码,取出结果再进行相应的转换..问题就解决了.并不需要修改源码:以下是修改的方法
第一:先在CaptureActivity类中设置它的默认编码
[java]
view plain
copy
decodeFormats =
null
;
characterSet = "ISO-8859-1"
;
第二:你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理的
[java]
view plain
copy
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 plain
copy
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的中文乱码问题.
8859
-
1
的格式来编码,取出结果再进行相应的转换..问题就解决了.并不需要修改源码:以下是修改的方法
第一:先在CaptureActivity类中设置它的默认编码
[java]
view plain
copy
decodeFormats =
null
;
characterSet = "ISO-8859-1"
;
第二:你在取回结果的Activity中转换相应的编码.这里我是在ResultActivity类里作处理的
[java]
view plain
copy
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 plain
copy
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的中文乱码问题.
相关文章推荐
- mysql自动备份、恢复脚本(linux的shell、windows的批处理)
- shell基础(二)
- Linux学习之bash总结(持续进行中….)
- hive调用Linux的shell命令测试
- shell 脚本之ping 命令同时打印时间
- Hbase shell 操作数据库常用命令
- windows下通过Runtime.getRuntime().exec.()执行linuxshell脚本
- sqlplus与shell互相传值的几种情况
- shellcode基础(1)
- -bash: ./radar.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
- BASH第八课作业
- 用Kali Linux动态shellcode注入工具:Shellter 4.0 绕过反病毒软件
- shell的一些应用场景
- shell排序
- 很有用的 Mac OS X Shell 脚本和终端命令
- Linux 基础知识:Bash Shell 内置命令
- L7.2 linux shell 条件判断语句
- Shell命令行操作
- shell脚本实现虚拟机实验环境的简单配置
- linux 通过 crontab 和 shell 每三秒跑一次check