Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 11144|Atbildi: 2

Par ķīniešu izkropļoto rakstzīmju problēmu, izmantojot ZXing QR kodu skenēšanai

[Kopēt saiti]
Publicēts 08.03.2015 23:36:08 | | |
Nesenā projekta funkcija prasa QR kodu skenēšanu. Es atsaucos uz Google atvērtā koda projektu ZXing: Pēc funkcijas pabeigšanas: Es atklāju, ka svītrkoda skenēšanā nebija problēmu: Bet, skenējot QR kodu, daži no tiem ir izkropļoti: Vai ne ķīniešu jautājums: Es atsaucos uz daudz informācijas internetā. Bet efekts joprojām nav ideāls: Vēlāk tika konstatēts, ka, kamēr tas ir kodēts ISO-8859-1 formātā, rezultāts tiek izņemts un pēc tam attiecīgi konvertēts: Problēma ir atrisināta. Avota kods nav jāmodificē: tālāk ir aprakstīts, kā to izdarīt

Pirmkārt: vispirms iestatiet noklusējuma kodējumu klasē CaptureActivity


  1. decodeFormats = null;
  2. characterSet = "ISO-8859-1";
Kopēt kodu


Otrkārt: jūs konvertējat atbilstošo kodējumu darbībā, kas izgūst rezultātu. Šeit es strādāju pie tā ResultActivity klasē


  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.         }
Kopēt kodu


Treškārt: Tālāk ir jāspriež, vai tas ir Unicode kodējumā


  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. }
Kopēt kodu


Visbeidzot, tas atrisina ķīniešu izkropļoto ZX problēmu




Iepriekšējo:PHP ģenerē QR koda piemēru
Nākamo:Kāda ir 360 Website Guard ietekme uz vietnes optimizāciju?
Publicēts 04.09.2015 13:20:39 |
Tas ir tik jaudīgs
Publicēts 04.09.2015 15:04:46 |
lele52099 Publicēts 2015-9-4 13:20
Tas ir tik jaudīgs

Kāpēc jums ir šis izteiciens?
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com