Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 11144|Răspunde: 2

Despre problema caracterelor chinezești distorsionate atunci când se folosește ZXing pentru scanarea codurilor QR

[Copiază linkul]
Postat pe 08.03.2015 23:36:08 | | |
Funcția proiectului recent necesită utilizarea scanării codurilor QR. Mă refer la proiectul open source al Google, ZXing: După finalizarea funcției: Am constatat că nu a fost nicio problemă la scanarea codului de bare: Dar când scanezi codul QR, unele dintre ele sunt distorsionate: Sau nu este o întrebare chineză: Am citit multe informații pe Internet. Dar efectul tot nu este ideal: Ulterior, s-a constatat că, atâta timp cât este codificat în formatul ISO-8859-1, rezultatul este eliminat și apoi convertit corespunzător: Problema este rezolvată. Nu trebuie să modifici codul sursă: iată cum se face

În primul rând: Mai întâi setează codarea implicită în clasa CaptureActivity


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Cod de copiere


În al doilea rând: Converti codarea corespunzătoare în activitatea care preia rezultatul. Iată-mă, lucrând la asta în clasa ResultActivity


  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.         }
Cod de copiere


În al treilea rând: următorul lucru este pentru a judeca dacă se află în codarea Unicode


  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. }
Cod de copiere


În cele din urmă, acest lucru rezolvă problema distorsionată chinezească a ZXing-ului




Precedent:PHP generează un exemplu de cod QR
Următor:Care sunt efectele 360 Website Guard asupra optimizării site-ului?
Postat pe 04.09.2015 13:20:39 |
E atât de puternic
Postat pe 04.09.2015 15:04:46 |
lele52099 Postat pe 2015-9-4 13:20
E atât de puternic

De ce ai această expresie?
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com