/*     */ package com.seuic.scanner;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public final class StringUtils
/*     */ {
/*  12 */   private static final String PLATFORM_DEFAULT_ENCODING = System.getProperty("file.encoding");
/*     */   
/*     */   public static final String SHIFT_JIS = "SJIS";
/*     */   private static final String EUC_JP = "EUC_JP";
/*     */   private static final String UTF8 = "UTF8";
/*     */   private static final String GB2312 = "GB2312";
/*     */   private static final String ISO88591 = "ISO8859_1";
/*  19 */   private static final boolean ASSUME_SHIFT_JIS = !(!"SJIS".equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) && 
/*  20 */     !"EUC_JP".equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING));
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String guessEncoding(byte[] bytes) {
/*  33 */     if (bytes.length > 3 && 
/*  34 */       bytes[0] == -17 && 
/*  35 */       bytes[1] == -69 && 
/*  36 */       bytes[2] == -65) {
/*  37 */       return "UTF8";
/*     */     }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */     
/*  46 */     int length = bytes.length;
/*  47 */     boolean canBeISO88591 = true;
/*  48 */     boolean canBeShiftJIS = true;
/*  49 */     boolean canBeUTF8 = true;
/*     */     
/*  51 */     boolean canBeGB2312 = true;
/*     */     
/*  53 */     int utf8BytesLeft = 0;
/*  54 */     int maybeDoubleByteCount = 0;
/*  55 */     int maybeSingleByteKatakanaCount = 0;
/*  56 */     boolean sawLatin1Supplement = false;
/*  57 */     boolean sawUTF8Start = false;
/*  58 */     boolean lastWasPossibleDoubleByteStart = false;
/*     */     
/*  60 */     for (int i = 0; i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8); i++) {
/*     */       
/*  62 */       int value = bytes[i] & 0xFF;
/*     */ 
/*     */       
/*  65 */       if (value >= 128 && value <= 191) {
/*  66 */         if (utf8BytesLeft > 0) {
/*  67 */           utf8BytesLeft--;
/*     */         }
/*     */       } else {
/*  70 */         if (utf8BytesLeft > 0) {
/*  71 */           canBeUTF8 = false;
/*     */         }
/*  73 */         if (value >= 192 && value <= 253) {
/*  74 */           sawUTF8Start = true;
/*  75 */           int valueCopy = value;
/*  76 */           while ((valueCopy & 0x40) != 0) {
/*  77 */             utf8BytesLeft++;
/*  78 */             valueCopy <<= 1;
/*     */           } 
/*     */         } 
/*     */       } 
/*     */ 
/*     */       
/*  84 */       if (!canBeUTF8 && canBeGB2312 && 
/*  85 */         value > 127 && 
/*  86 */         value > 176 && value < 247) {
/*  87 */         int value2 = bytes[i + 1] & 0xFF;
/*  88 */         if (value2 > 160 && value2 <= 247) {
/*  89 */           canBeGB2312 = true;
/*     */ 
/*     */ 
/*     */           
/*     */           break;
/*     */         } 
/*     */       } 
/*     */ 
/*     */       
/*  98 */       if ((value == 194 || value == 195) && i < length - 1) {
/*     */ 
/*     */ 
/*     */         
/* 102 */         int nextValue = bytes[i + 1] & 0xFF;
/* 103 */         if (nextValue <= 191 && ((
/* 104 */           value == 194 && nextValue >= 160) || (value == 195 && nextValue >= 128))) {
/* 105 */           sawLatin1Supplement = true;
/*     */         }
/*     */       } 
/* 108 */       if (value >= 127 && value <= 159) {
/* 109 */         canBeISO88591 = false;
/*     */       }
/*     */ 
/*     */ 
/*     */       
/* 114 */       if (value >= 161 && value <= 223)
/*     */       {
/* 116 */         if (!lastWasPossibleDoubleByteStart) {
/* 117 */           maybeSingleByteKatakanaCount++;
/*     */         }
/*     */       }
/* 120 */       if (!lastWasPossibleDoubleByteStart && ((
/* 121 */         value >= 240 && value <= 255) || value == 128 || value == 160)) {
/* 122 */         canBeShiftJIS = false;
/*     */       }
/* 124 */       if ((value >= 129 && value <= 159) || (value >= 224 && value <= 239)) {
/*     */ 
/*     */         
/* 127 */         if (lastWasPossibleDoubleByteStart) {
/*     */ 
/*     */ 
/*     */ 
/*     */           
/* 132 */           lastWasPossibleDoubleByteStart = false;
/*     */         }
/*     */         else {
/*     */           
/* 136 */           lastWasPossibleDoubleByteStart = true;
/* 137 */           if (i >= bytes.length - 1) {
/* 138 */             canBeShiftJIS = false;
/*     */           } else {
/* 140 */             int nextValue = bytes[i + 1] & 0xFF;
/* 141 */             if (nextValue < 64 || nextValue > 252) {
/* 142 */               canBeShiftJIS = false;
/*     */             } else {
/* 144 */               maybeDoubleByteCount++;
/*     */             }
/*     */           
/*     */           } 
/*     */         } 
/*     */       } else {
/*     */         
/* 151 */         lastWasPossibleDoubleByteStart = false;
/*     */       } 
/*     */     } 
/* 154 */     if (utf8BytesLeft > 0) {
/* 155 */       canBeUTF8 = false;
/*     */     }
/*     */ 
/*     */     
/* 159 */     if (canBeShiftJIS && ASSUME_SHIFT_JIS) {
/* 160 */       return "SJIS";
/*     */     }
/* 162 */     if (canBeUTF8 && sawUTF8Start) {
/* 163 */       return "UTF8";
/*     */     }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */     
/* 170 */     if (canBeShiftJIS && (maybeDoubleByteCount >= 3 || 20 * maybeSingleByteKatakanaCount > length)) {
/* 171 */       return "SJIS";
/*     */     }
/*     */ 
/*     */     
/* 175 */     if (canBeGB2312) {
/* 176 */       return "GB2312";
/*     */     }
/*     */     
/* 179 */     if (!sawLatin1Supplement && canBeISO88591) {
/* 180 */       return "ISO8859_1";
/*     */     }
/*     */     
/* 183 */     return PLATFORM_DEFAULT_ENCODING;
/*     */   }
/*     */ }


/* Location:              E:\Demo\ChaoRan_A9L\libs\ScannerAPI.jar!\com\seuic\scanner\StringUtils.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       1.1.3
 */