Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4146970

Exception occurs when instantiating String object by EUC encoder.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.1.6
    • core-libs



      Name: diC59631 Date: 06/09/98


      When Japanese Shift-JIS code string is instanced as String object by encoding
      'EUC_JP' and 'EUCJIS', an exception occurs in JDK1.1.6FCS and JDK1.1.7A. This
      used not happen in JDK1.1.5 and its earlier version. The exception message is
      as follows:
       
      E:\javac testeucstring4.java
      E:\java testeucstring4
      java.lang.StringIndexOutOfBoundsException: String index out of range: -1
              at java.lang.Throwable.<init> (Compied code)
              at java.lang.StringIndexOutOfBoundsException.<init> (Compied code)
              at java.lang.String.charAt (Compied code)
              at sun.io.ByteToCharEUC_JP.getUnicode (ByteToCharEUC_JP.java: 81)
              at sun.io.ByteToCharEUC_JP.convert (Compiled code)
              at java.lang.String.<init> (String.java: 268)
              at java.lang.String.<init> (String.java: 302)
              at java.lang.String.<init> (String.java: 321)
              at testeucstring4.main (testeucstring4.java:23)
       
      The following code, which contains Japanese Shift-JIS code, demostrates
      the problem. The java in JDK1.1.5 and earlier version displays '???'
      instead of ending in an exception.
       
      begin 644 testeucstring4.java
      M:6UP;W)T(&IA=F$N:6\N*CL*:6UP;W)T(&IA=F$N=71I;"XJ.PII;7!O<G0@
      M:F%V82YL86YG+BH["@IP=6)L:6,@8VQA<W,@=&5S=&5U8W-T<FEN9S0@>PH*
      M"7!U8FQI8R!S=&%T:6,@9FEN86P@4W1R:6YG(" @54Y)0T]$12 ]("))4T\M
      M.#@U.2TQ(CL@("\O();BD>B"R(*U"@EP=6)L:6,@<W1A=&EC(&9I;F%L(%-T
      M<FEN9R @($I)4R ](")*25,B.R @(" @(" @("\O();BD>B"R(*U"@EP=6)L
      M:6,@<W1A=&EC(&9I;F%L(%-T<FEN9R @(%-*25,@/2 B4TI)4R([(" @(" O
      M+R"6XI'H@LB"M0H*+R\@2D1+,2XQ+C."Q8+-(D550TI)4R*"QI+HBV""LX+J
      M@L2"HH*]@JI*1$LQ+C$N-H*I@N>"S2)%54-?2E B@LF5SXU8@LF"R(+!@KV"
      MYX*U@J*!0@HO+PEP=6)L:6,@<W1A=&EC(&9I;F%L(%-T<FEN9R @($550R ]
      M(")%54-*25,B.R @+R\@EN*1Z(*@@N@*"7!U8FQI8R!S=&%T:6,@9FEN86P@
      M4W1R:6YG(" @155#(#T@(D550U]*4"([(" O+R"6XI'H@J""Z"A*1$LQ,3:"
      MJ8+GE<^-6(+)@LB"P8*]@N>"M8*B@4*!:@H*(" @('!U8FQI8R!S=&%T:6,@
      M=F]I9"!M86EN*%-T<FEN9R!A<F=S6UTI"B @("!["@HO+PD)4W1R:6YG('1M
      M<%-T<B ](&YE=R!3=')I;F<H(C$R04(_(8-!@T.#18-@@X<B*3L@("\O(#%B
      M>71E@LV6XI'H@LB"M8%""@D)4W1R:6YG('1M<%-T<B ](&YE=R!3=')I;F<H
      M(H*@@J*"I(*F@J@B*3L@(" @(" O+R R8GET98+-EN*1Z(*@@NB!0@H)"6)Y
      M=&5;72!T;7!">71E(#T@=&UP4W1R+F=E=$)Y=&5S*"D["@H)"71R>7L*"0D)
      M4W1R:6YG('1A:V\@/2!N97<@4W1R:6YG*'1M<$)Y=&4L($550RD["@D)"5-Y
      M<W1E;2YO=70N<')I;G1L;B@B4W1R(#TB*W1A:V\I.PH)"7T*"0EC871C:" H
      M56YS=7!P;W)T961%;F-O9&EN9T5X8V5P=&EO;B!E*2 *"0E["@D)"5-Y<W1E
      M;2YO=70N<')I;G1L;B@B97)R;W)%;F-O9&EN9U-T<FEN9R(I.PH)"7T*"@E]
      $"@I]"G0N
       
      end
      (Review ID: 33305)
      ======================================================================

      Here is a platform independent version of testeucstring4.java:

      import java.io.*;
      import java.util.*;
      import java.lang.*;

      public class testeucstring4 {

              public static final String UNICODE = "ISO-8859-1"; // \u554f\u984c\u306a\u3057
              public static final String JIS = "JIS"; // \u554f\u984c\u306a\u3057
              public static final String SJIS = "SJIS"; // \u554f\u984c\u306a\u3057

      // JDK1.1.3\u3067\u306f"EUCJIS"\u3068\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u305f\u304cJDK1.1.6\u304b\u3089\u306f"EUC_JP"\u306b\u5909\u66f4\u306b\u306a\u3063\u305f\u3089\u3057\u3044\u3002
      // public static final String EUC = "EUCJIS"; // \u554f\u984c\u3042\u308a
              public static final String EUC = "EUC_JP"; // \u554f\u984c\u3042\u308a(JDK116\u304b\u3089\u5909\u66f4\u306b\u306a\u3063\u305f\u3089\u3057\u3044\u3002\uff09

          public static void main(String args[]) throws java.io.UnsupportedEncodingException
          {

      // String tmpStr = new String("12AB?!\u30a2\u30a4\u30a6\u30c1\u30e7"); // 1byte\u306f\u554f\u984c\u306a\u3057\u3002
                      String tmpStr = new String("\u3042\u3044\u3046\u3048\u304a"); // 2byte\u306f\u554f\u984c\u3042\u308a\u3002
                      byte[] tmpByte = tmpStr.getBytes(SJIS);

                      try{
                              String tako = new String(tmpByte, EUC);
                              System.out.println("Str ="+tako);
                      }
                      catch (UnsupportedEncodingException e)
                      {
                              System.out.println("errorEncodingString");
                      }

              }

      }

      masayoshi.okutsu@Eng 1998-08-06

            okutsu Masayoshi Okutsu
            dindrigo Daniel Indrigo (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: