您的位置:首页 > 运维架构 > Shell

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的中文乱码问题.
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: