home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.io; import java.io.UnsupportedEncodingException; public class ByteToCharJISAutoDetect extends ByteToCharConverter { private String convName; private ByteToCharConverter detectedConv; private ByteToCharConverter defaultConv; public ByteToCharJISAutoDetect() { try { this.defaultConv = ByteToCharConverter.getConverter("8859_1"); } catch (UnsupportedEncodingException var1) { this.defaultConv = new ByteToCharDefault(); } this.defaultConv.subChars = super.subChars; this.defaultConv.subMode = super.subMode; } public int flush(char[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException { super.badInputLength = 0; return this.detectedConv != null ? this.detectedConv.flush(var1, var2, var3) : this.defaultConv.flush(var1, var2, var3); } public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws UnknownCharacterException, MalformedInputException, ConversionBufferFullException { int var7 = var2; int var8 = var2 + var3; String var10 = null; ByteToCharConverter var11 = null; try { if (this.detectedConv == null) { for(int var12 = var7; var12 < var8; ++var12) { int var13 = var1[var12] & 255; if (var13 == 27) { this.convName = "ISO2022JP"; break; } if (var13 >= 129 && var13 <= 159) { this.convName = "SJIS"; break; } if (var13 >= 161 && var13 <= 223 || var13 >= 253 && var13 <= 254) { this.convName = "EUC_JP"; break; } if (var13 >= 224 && var13 <= 234) { if (var12 + 1 >= var8) { throw new MalformedInputException(); } ++var12; var13 = var1[var12] & 255; if (var13 >= 64 && var13 <= 126) { this.convName = "SJIS"; break; } if (var10 == null) { var10 = "SJIS"; } break; } if (var13 >= 235 && var13 <= 252) { if (var12 + 1 >= var8) { throw new MalformedInputException(); } ++var12; var13 = var1[var12] & 255; if (var13 >= 64 && var13 <= 126) { this.convName = "SJIS"; break; } if (var10 == null) { var10 = "EUC_JP"; } break; } } if (this.convName != null) { try { this.detectedConv = ByteToCharConverter.getConverter(this.convName); this.detectedConv.subChars = super.subChars; this.detectedConv.subMode = super.subMode; } catch (UnsupportedEncodingException var24) { this.detectedConv = null; this.convName = null; } } else if (var10 != null) { try { var11 = ByteToCharConverter.getConverter(var10); var11.subChars = super.subChars; var11.subMode = super.subMode; } catch (UnsupportedEncodingException var23) { var11 = null; Object var26 = null; } } } } catch (Exception var25) { this.detectedConv = this.defaultConv; } int var9; if (this.detectedConv != null) { try { var9 = this.detectedConv.convert(var1, var2, var3, var4, var5, var6); super.charOff = this.detectedConv.nextCharIndex(); super.byteOff = this.detectedConv.nextByteIndex(); super.badInputLength = this.detectedConv.badInputLength; } catch (UnknownCharacterException var20) { super.charOff = this.detectedConv.nextCharIndex(); super.byteOff = this.detectedConv.nextByteIndex(); super.badInputLength = this.detectedConv.badInputLength; throw var20; } catch (MalformedInputException var21) { super.charOff = this.detectedConv.nextCharIndex(); super.byteOff = this.detectedConv.nextByteIndex(); super.badInputLength = this.detectedConv.badInputLength; throw var21; } catch (ConversionBufferFullException var22) { super.charOff = this.detectedConv.nextCharIndex(); super.byteOff = this.detectedConv.nextByteIndex(); super.badInputLength = this.detectedConv.badInputLength; throw var22; } } else if (var11 != null) { try { var9 = var11.convert(var1, var2, var3, var4, var5, var6); super.charOff = var11.nextCharIndex(); super.byteOff = var11.nextByteIndex(); super.badInputLength = var11.badInputLength; } catch (UnknownCharacterException var17) { super.charOff = var11.nextCharIndex(); super.byteOff = var11.nextByteIndex(); super.badInputLength = var11.badInputLength; throw var17; } catch (MalformedInputException var18) { super.charOff = var11.nextCharIndex(); super.byteOff = var11.nextByteIndex(); super.badInputLength = var11.badInputLength; throw var18; } catch (ConversionBufferFullException var19) { super.charOff = var11.nextCharIndex(); super.byteOff = var11.nextByteIndex(); super.badInputLength = var11.badInputLength; throw var19; } } else { try { var9 = this.defaultConv.convert(var1, var2, var3, var4, var5, var6); super.charOff = this.defaultConv.nextCharIndex(); super.byteOff = this.defaultConv.nextByteIndex(); super.badInputLength = this.defaultConv.badInputLength; } catch (UnknownCharacterException var14) { super.charOff = this.defaultConv.nextCharIndex(); super.byteOff = this.defaultConv.nextByteIndex(); super.badInputLength = this.defaultConv.badInputLength; throw var14; } catch (MalformedInputException var15) { super.charOff = this.defaultConv.nextCharIndex(); super.byteOff = this.defaultConv.nextByteIndex(); super.badInputLength = this.defaultConv.badInputLength; throw var15; } catch (ConversionBufferFullException var16) { super.charOff = this.defaultConv.nextCharIndex(); super.byteOff = this.defaultConv.nextByteIndex(); super.badInputLength = this.defaultConv.badInputLength; throw var16; } } return var9; } public void reset() { if (this.detectedConv != null) { this.detectedConv.reset(); this.detectedConv = null; this.convName = null; } else { this.defaultConv.reset(); } } public String getCharacterEncoding() { return "JISAutoDetect"; } }