Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 11144|Jawab: 2

Tentang masalah karakter Cina yang kacau saat menggunakan ZXing untuk memindai kode QR

[Salin tautan]
Diposting pada 08/03/2015 23.36.08 | | |
Fungsi proyek terbaru membutuhkan penggunaan pemindaian kode QR. Saya mengacu pada proyek open source Google ZXing: Setelah fungsi selesai: Saya menemukan bahwa tidak ada masalah dalam memindai kode batang: Tetapi saat memindai kode QR, beberapa di antaranya kacau: Atau bukan pertanyaan Cina: Saya merujuk pada banyak informasi di Internet. Tetapi efeknya masih belum ideal: Kemudian, ditemukan bahwa selama dikodekan dalam format ISO-8859-1, hasilnya dikeluarkan dan kemudian dikonversi sesuai dengan itu: Masalahnya terpecahkan. Anda tidak perlu memodifikasi kode sumber: berikut cara melakukannya

Pertama: Pertama-tama atur pengodean defaultnya di kelas CaptureActivity


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Salin kode


Kedua: Anda mengonversi pengkodean yang sesuai dalam aktivitas yang mengambil hasilnya. Di sini saya sedang mengerjakannya di kelas 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.         }
Salin kode


Ketiga: Berikut ini adalah untuk menilai apakah itu dalam pengkodean 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. }
Salin kode


Akhirnya, ini memecahkan masalah ZXing yang kacau di Cina




Mantan:PHP menghasilkan contoh kode QR
Depan:Apa efek 360 Website Guard pada pengoptimalan situs web?
Diposting pada 04/09/2015 13.20.39 |
Ini sangat kuat
Diposting pada 04/09/2015 15.04.46 |
lele52099 Posted on 2015-9-4 13:20
Ini sangat kuat

Mengapa Anda memiliki ungkapan ini?
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com