Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11144|Atsakyti: 2

Apie kinų kalbos iškraipytų simbolių problemą naudojant ZXing QR kodams nuskaityti

[Kopijuoti nuorodą]
Paskelbta 2015-03-08 23:36:08 | | |
Naujausio projekto funkcijai reikia naudoti QR kodų nuskaitymą. Turiu omenyje "Google" atvirojo kodo projektą ZXing: Baigę funkciją: Pastebėjau, kad nuskaitant brūkšninį kodą nebuvo jokių problemų: Tačiau nuskaitant QR kodą, kai kurie iš jų yra iškraipyti: Arba ne kinų klausimas: Aš nurodžiau daug informacijos internete. Tačiau poveikis vis tiek nėra idealus: Vėliau buvo nustatyta, kad tol, kol jis užkoduotas ISO-8859-1 formatu, rezultatas išimamas ir atitinkamai konvertuojamas: Problema išspręsta. Jums nereikia keisti šaltinio kodo: štai kaip tai padaryti

Pirma: pirmiausia nustatykite numatytąjį kodavimą klasėje CaptureActivity


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Kopijuoti kodą


Antra: konvertuojate atitinkamą kodavimą veikloje, kuri gauna rezultatą. Čia aš dirbu su juo ResultActivity klasėje


  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.         }
Kopijuoti kodą


Trečia: Toliau reikia spręsti, ar jis yra Unicode kodavimo


  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. }
Kopijuoti kodą


Galiausiai, tai išsprendžia Kinijos iškraipytą ZXing problemą




Ankstesnis:PHP sugeneruoja QR kodo pavyzdį
Kitą:Koks yra 360 Website Guard poveikis svetainės optimizavimui?
Paskelbta 2015-09-04 13:20:39 |
Jis toks galingas
Paskelbta 2015-09-04 15:04:46 |
lele52099 Parašė 2015-9-4 13:20
Jis toks galingas

Kodėl turite šį posakį?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com