Viimase projekti eesmärk on kasutada QR-koodide skaneerimist. Viitan Google'i avatud lähtekoodiga projektile ZXing: Pärast funktsiooni täitmist: Leidsin, et vöötkoodi skaneerimisel polnud mingit probleemi: Kuid QR-koodi skannimisel on mõned neist segased: Või mitte hiina küsimus: Ma viitasin internetis palju infole. Kuid tulemus pole siiski ideaalne: Hiljem selgus, et seni, kuni see on kodeeritud ISO-8859-1 formaadis, võetakse tulemus välja ja teisendatakse vastavalt: Probleem on lahendatud. Sa ei pea lähtekoodi muutma: siin on, kuidas seda teha
Esiteks: Esmalt määra selle vaikimisi kodeerimine CaptureActivity klassis
- decodeFormats = null;
- characterSet = "ISO-8859-1";
Kopeeri kood
Teiseks: Sa teisendad vastava kodeeringu tegevusesse, mis tulemuse kätte saab. Siin ma töötan selle kallal ResultActivity klassis
- 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);
- }
Kopeeri kood
Kolmandaks: Järgnevalt tuleb hinnata, kas see on Unicode'i kodeeringus
- 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;
- }
- }
Kopeeri kood
Lõpuks lahendab see Hiina segase ZXingu probleemi
|