See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11144|Vastuse: 2

Hiina tähemärkide segase segase probleemi kohta, kui ZX-i kasutatakse QR-koodide skaneerimiseks

[Kopeeri link]
Postitatud 08.03.2015 23:36:08 | | |
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


  1. decodeFormats = null;
  2. 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


  1. public class ResultActivity extends Activity implements OnClickListener{

  2.         private TextView dec_result;
  3.         private String resultStr;
  4.         private ImageView codeImage;
  5.         private Button returnChoujiang,returnJubao;
  6.         @Override
  7.         protected void onCreate(Bundle savedInstanceState) {
  8.                 // TODO Auto-generated method stub
  9.                 super.onCreate(savedInstanceState);
  10.                 setContentView(R.layout.dec_result);
  11.                 init();
  12.                 dec_result=(TextView)findViewById(R.id.dec_result);
  13.                 codeImage=(ImageView)findViewById(R.id.code_image);
  14.                 Intent intent=getIntent();
  15.                 resultStr=intent.getStringExtra("result");
  16.                 String UTF_Str="";
  17.                 String GB_Str="";
  18.                 boolean is_cN=false;
  19.                 try {
  20.                         System.out.println("------------"+resultStr);
  21.                         UTF_Str=new String(resultStr.getBytes("ISO-8859-1"),"UTF-8");
  22.                         System.out.println("这是转了UTF-8的"+UTF_Str);
  23.                         is_cN=IsChineseOrNot.isChineseCharacter(UTF_Str);
  24.                         //防止有人特意使用乱码来生成二维码来判断的情况
  25.                         boolean b=IsChineseOrNot.isSpecialCharacter(resultStr);
  26.                         if(b){
  27.                                 is_cN=true;
  28.                         }
  29.                         System.out.println("是为:"+is_cN);
  30.                         if(!is_cN){
  31.                                 GB_Str=new String(resultStr.getBytes("ISO-8859-1"),"GB2312");
  32.                                 System.out.println("这是转了GB2312的"+GB_Str);
  33.                         }
  34.                 } catch (UnsupportedEncodingException e) {
  35.                         // TODO Auto-generated catch block
  36.                         e.printStackTrace();
  37.                 }
  38.                
  39.                
  40.                 Bitmap bm=intent.getParcelableExtra("IMG_return");
  41.                 if(is_cN){
  42.                         dec_result.setText(UTF_Str);
  43.                 }else{
  44.                         dec_result.setText(GB_Str);
  45.                 }
  46.                 codeImage.setImageBitmap(bm);
  47.                
  48.                 returnChoujiang.setOnClickListener(this);
  49.                 returnJubao.setOnClickListener(this);
  50.         }
Kopeeri kood


Kolmandaks: Järgnevalt tuleb hinnata, kas see on Unicode'i kodeeringus


  1. public class IsChineseOrNot {
  2.        
  3.     public static final boolean isChineseCharacter(String chineseStr) {  
  4.         char[] charArray = chineseStr.toCharArray();  
  5.         for (int i = 0; i < charArray.length; i++) {         
  6.                 //是否是Unicode编码,除了"&#65533;"这个字符.这个字符要另外处理
  7.             if ((charArray[i] >= '\u0000' && charArray[i] < '\uFFFD')||((charArray[i] > '\uFFFD' && charArray[i] < '\uFFFF'))) {  
  8.                 continue;
  9.             }
  10.             else{
  11.                     return false;
  12.             }
  13.         }  
  14.         return true;  
  15.     }  
  16.    
  17.     public static final boolean isSpecialCharacter(String str){
  18.             //是"&#65533;"这个特殊字符的乱码情况
  19.             if(str.contains("&#239;&#191;&#189;")){
  20.                     return true;
  21.             }
  22.             return false;
  23.     }
  24. }
Kopeeri kood


Lõpuks lahendab see Hiina segase ZXingu probleemi




Eelmine:PHP genereerib QR-koodi näite
Järgmine:Millised on 360 Website Guardi mõju veebisaidi optimeerimisele?
Postitatud 04.09.2015 13:20:39 |
See on nii võimas
Postitatud 04.09.2015 15:04:46 |
lele52099 postitatud 2015-9-4 kell 13:20
See on nii võimas

Miks sul selline ilme on?
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com