Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11144|Odgovoriti: 2

O problemu popačenih kitajskih znakov pri uporabi ZXing za skeniranje QR kod

[Kopiraj povezavo]
Objavljeno na 8. 03. 2015 23:36:08 | | |
Funkcija nedavnega projekta zahteva uporabo skeniranja QR kod. Mislim na Googlov odprtokodni projekt ZXing: Ko je funkcija zaključena: Ugotovil sem, da ni bilo težav s skeniranjem črtne kode: A ko skeniram QR kodo, so nekatere popačene: Ali pa ne kitajsko vprašanje: Skliceval sem se na veliko informacij na internetu. A učinek še vedno ni idealen: Kasneje je bilo ugotovljeno, da se rezultat odstrani in nato ustrezno pretvori, dokler je kodiran v formatu ISO-8859-1: Problem je rešen. Ni vam treba spreminjati izvorne kode: tukaj je, kako to storiti

Najprej: Najprej nastavite njegovo privzeto kodiranje v razredu CaptureActivity


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Kopiraj kodo


Drugič: Pretvorite ustrezno kodiranje v aktivnost, ki pridobi rezultat. Tukaj delam na tem v predmetu 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.         }
Kopiraj kodo


Tretjič: Naslednje je za presojo, ali je v Unicode kodiranju


  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. }
Kopiraj kodo


Končno to reši kitajski popačen problem ZXanja




Prejšnji:PHP generira primer QR kode
Naslednji:Kakšni so učinki 360 Website Guard na optimizacijo spletnih strani?
Objavljeno na 4. 09. 2015 13:20:39 |
To je tako močno
Objavljeno na 4. 09. 2015 15:04:46 |
lele52099 objavljeno 4. 9. 2015 ob 13:20
To je tako močno

Zakaj imaš tak izraz?
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com