Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11144|Vastaus: 2

Kiinalaisten sekavien merkkien ongelmasta, kun ZX:ää käytetään QR-koodien skannaamiseen

[Kopioi linkki]
Julkaistu 8.3.2015 23.36.08 | | |
Viimeisimmän projektin tarkoituksena on käyttää QR-koodien skannausta. Viittaan Googlen avoimen lähdekoodin projektiin ZXing: Kun funktio on suoritettu: Huomasin, ettei viivakoodin skannaamisessa ollut ongelmia: Mutta QR-koodia skannattaessa osa niistä on sekavaa: Tai ei kiinalainen kysymys: Viittasin paljon internetissä olevaan tietoon. Mutta vaikutus ei silti ole ihanteellinen: Myöhemmin havaittiin, että niin kauan kuin se on koodattu ISO-8859-1-muodossa, tulos poistetaan ja muunnetaan sen mukaisesti: Ongelma on ratkaistu. Lähdekoodia ei tarvitse muuttaa: näin se tehdään

Ensimmäinen: Aseta ensin oletuskoodaus CaptureActivity-luokassa


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Kopioi koodi


Toiseksi: Muunnat vastaavan koodauksen siihen aktiviteettiin, joka hakee tuloksen. Tässä minä työskentelen sen parissa ResultActivity-luokassa


  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.         }
Kopioi koodi


Kolmanneksi: Seuraava on arvioida, onko se Unicode-koodauksessa


  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. }
Kopioi koodi


Lopulta tämä ratkaisee kiinalaisen sekavan ZX-ongelman




Edellinen:PHP luo QR-koodiesimerkin
Seuraava:Mitkä ovat 360 Website Guardin vaikutukset verkkosivuston optimointiin?
Julkaistu 4.9.2015 13.20.39 |
Se on niin voimakas
Julkaistu 4.9.2015 15.04.46 |
lele52099 julkaistu 2015-9-4 klo 13:20
Se on niin voimakas

Miksi sinulla on tämä ilme?
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com