Prev: Whither JDK 7?
Next: writing to DVD
From: moonhkt on 28 May 2010 12:23 On 5æ28æ¥, ä¸å5æ58å, RedGrittyBrick <RedGrittyBr...(a)spamweary.invalid> wrote: > On 28/05/2010 08:45, moonhkt wrote: > > > > > On 5æ27æ¥, ä¸å4æ¶39å, RedGrittyBrick<RedGrittyBr...(a)SpamWeary.invalid> > > wrote: > >> On 26/05/2010 21:13, RedGrittyBrick wrote: > > >> Oops. > >>          if (c<  0x10) { > >>            sb.append("0"); > >>          } > >>          sb.append(Integer.toHexString(c); > > >> -- > >> RGB > > > Hi RGB > > > Our AIX editor can not able to edit GB2312 code, I update the text > > string with byte value. It is OK ? > > Since you already had a temp.txt file you could have just commented-out > the writeFile() call. > > I didn't so I used Java to create one - you don't really need to do this > if you are certain that your temp.txt contains the characters in GB2312 > encoding. > > But see below ... > > > > > > > java GB2312Bytes > > > Change Terminal Emulation to Host charcter to GB2312., the output as > > below > > > Writing  æµè¯ to temp.txt > > 3f3f3f3f0a > > > od -ct x1 temp.txt > > 0000000   ?  ?  ?  ?  \n > >       3f  3f  3f  3f  0a > > 0000005 > > > import java.io.FileInputStream; > > import java.io.FileNotFoundException; > > import java.io.IOException; > > import java.io.PrintWriter; > > import java.io.UnsupportedEncodingException; > > > public class GB2312Bytes { > >    public static void main(String[] args) { > >      String fileName = "temp.txt"; > >      String text = new String( new byte [] { > >       (byte) 0xb2, (byte) 0xe2 , (byte) 0xca , (byte) 0xd4 > > Firstly, you should use Unicode escapes to insert unicode characters. > Secondly you should use Unicode code-points not GB2312 code points, this > is because Java Strings are Unicode strings (in UTF-16 encoding) > > See <http://www.herongyang.com/gb2312/ug_map_24.html> 8BD5 CAD4 è¯ and > <http://www.herongyang.com/gb2312/ug_map_15.html> 6D4B B2E2 æµ > > So use >        String text = "\u6d4b\u8bd5"; > > When you later write this Unicode String data to a file using GB2312 > encoding, Java will translate the Unicode code-point to the GB2312 code > point. > > Also remember that Unicode is much bigger than GB2312, Java can only > perform this conversion if the Unicode code points are for characters > that are within the GB2312 character set. Unicode code points b2e2 and > cad4, that you specified) are actually Korean Hangul characters that are > not not in GB2312 and so are translated to "?". > > > > >      }); > >      writeFile(fileName, text, "GB2312"); > >      System.out.println(fileAsHex(fileName)); > >    } > > >    private static void writeFile(String fileName, String text, > >        String encoding) { > >      System.out.println("Writing '" + text + "' to " + fileName); > >      PrintWriter pw; > >      try { > >        pw = new PrintWriter(fileName, encoding); > >        pw.println(text); > >        pw.close(); > >      } catch (FileNotFoundException e) { > >        e.printStackTrace(); > >      } catch (UnsupportedEncodingException e) { > >        e.printStackTrace(); > >      } > >    } > > >    private static String fileAsHex(String fileName) { > >      StringBuilder sb = new StringBuilder(); > > >      FileInputStream in = null; > >      try { > >        in = new FileInputStream(fileName); > >        int c; > >        while ((c = in.read()) != -1) { > >          if (c<  0x10) { > >            sb.append("0"); > >          } > >          sb.append(Integer.toHexString(c)); > >        } > >      } catch (FileNotFoundException e) { > >        e.printStackTrace(); > >      } catch (IOException e) { > >        e.printStackTrace(); > >      } finally { > >        if (in != null) { > >          try { > >            in.close(); > >          } catch (IOException e) { > >            e.printStackTrace(); > >          } > >        } > >      } > > >      return sb.toString(); > >    } > > } > > -- > RGB Thank . Rewrite the code, Output as below. My JCreator Can not display GB2312 Code. Writing '??' to temp.txt b2e2cad40d0a Process completed. |