Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11144|Antwoord: 2

Over het probleem van Chinese onverstaanbare tekens bij het gebruik van ZXing om QR-codes te scannen

[Link kopiëren]
Geplaatst op 08-03-2015 23:36:08 | | |
De functie van het recente project vereist het gebruik van het scannen van QR-codes. Ik verwijs naar Google's open source-project ZXing: Nadat de functie is voltooid: Ik ontdekte dat er geen probleem was met het scannen van de barcode: Maar bij het scannen van de QR-code zijn sommige onverstaanbaar: Of geen Chinese vraag: Ik heb veel informatie op internet verwezen. Maar het effect is nog steeds niet ideaal: Later werd vastgesteld dat zolang het gecodeerd is in het formaat ISO-8859-1, het resultaat wordt verwijderd en vervolgens dienovereenkomstig wordt omgezet: Het probleem is opgelost. Je hoeft de broncode niet aan te passen: zo doe je dat

Ten eerste: Stel eerst de standaardcodering in in de CaptureActivity-klasse


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Code kopiëren


Ten tweede: Je zet de bijbehorende codering om in de activiteit die het resultaat ophaalt. Hier ben ik eraan bezig, in de ResultActivity-cursus


  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.         }
Code kopiëren


Ten derde: Het volgende is om te beoordelen of het in Unicode-codering zit


  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. }
Code kopiëren


Tot slot lost dit het Chinese verwarde probleem van ZXing op




Vorig:PHP genereert een voorbeeld van een QR-code
Volgend:Wat zijn de effecten van 360 Website Guard op websiteoptimalisatie?
Geplaatst op 04-09-2015 13:20:39 |
Het is zo krachtig
Geplaatst op 04-09-2015 15:04:46 |
lele52099 geplaatst op 2015-9-4 13:20
Het is zo krachtig

Waarom heb je deze uitdrukking?
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com