Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 11144|Yanıt: 2

ZXing ile QR kodlarını tararken Çin karakterlerinin karışması sorunu hakkında

[Bağlantıyı kopyala]
Yayınlandı 8.03.2015 23:36:08 | | |
Son projenin işlevi, taramalı QR kodlarının kullanılmasını gerektiriyor. Google'ın açık kaynak projesi ZXing'den bahsediyorum: Fonksiyon tamamlandıktan sonra: Barkodu taramada hiçbir sorun olmadığını fark ettim: Ancak QR kodunu tararken bazıları karışıyor: Ya da Çin sorusu değil: İnternette çok fazla bilgiye atıfta bulundum. Ama etki hâlâ ideal değil: Daha sonra, ISO-8859-1 formatında kodlandığı sürece sonucun çıkarılıp buna göre dönüştürüldüğü tespit edildi: Sorun çözüldü. Kaynak kodunu değiştirmenize gerek yok: nasıl yapılacağı şöyle

Birinci: Önce CaptureActivity sınıfında varsayılan kodlamasını ayarlayın


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Kopya kodu


İkincisi: Sonucu geri alan aktivitedeki karşılık gelen kodlamayı dönüştürürsünüz. İşte ResultActivity sınıfında üzerinde çalışıyorum


  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.         }
Kopya kodu


Üçüncüsü: Aşağıdakiler, Unicode kodlama içinde olup olmadığını değerlendirmek için


  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. }
Kopya kodu


Son olarak, bu Çin'in ZXing sorununu çözüyor




Önceki:PHP bir QR kod örneği oluşturur
Önümüzdeki:360 Website Guard'ın web sitesi optimizasyonu üzerindeki etkileri nelerdir?
Yayınlandı 4.09.2015 13:20:39 |
Çok güçlü
Yayınlandı 4.09.2015 15:04:46 |
lele52099 2015-9-4 13:20 tarihinde yayınlandı
Çok güçlü

Neden bu ifadeye sahipsin?
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com