Thanks very much, Michael. Your help is far over what I expect. Using the converter program is a better than looking up the near 100 pages long table. Is some sort of internal structure how the table is formed?
The last time I used a Chinese word processor was more than a decade ago. I may need to figure out how to enter Chinese characters with a regular keyboard. I remember there are quick few entry methods. Server side validation error messages come from the server, not on the presentation layer. It is better to be localizated as well as. 5/24/2002 12:56:46 AM, "Michale Zhou" <[EMAIL PROTECTED]> wrote: >Vernon, > >Your last question first. For mapping between Chinese chars and Unicode, >look at http://www.unicode.org/charts/index.html, click aon CJK Unified >Ideographs (5MB) link. You will also find a lot of useful information at >www.unicode.org. > >We actually wrote two utility programs to simplify the conversion. Attached >is the source code. I assume you can input Chinese in an editor (like NJ >WordProcessor, www.njstar.com) and save it to your preferred encoding, >GB2312 or Big5. The UnicodeConverter program then take this file as the >input and output the unicode presentation to another file. For example, > java UnicodeConverter gb2312 yourfile.GB.TXT yourfile.unicode >The other program, UnicodeReverseConverter does just the oppoiste. With help >of these tools, we can quickly *.properties in both directions. You may have >known this, just so to make things clear. We use \uxxxx (Chinese) in our >*_zh.properties files to serve Chinese locale. We have another jsp page >called unicodeGenerator.jsp to do Chinese (or other language) -> Unicode >conversion, attached at the bottom of the message. > >Regarding your another question: >> Have you encountered any situation that messages come from the server? If >so, do you create >> another set of resource bundle? > >You mean the messages generated from the Web server, like Tomcat? We don't >localizae that piece of information. > >//----------------- UnicodeConverter.java ----------------------- >import java.io.*; > >/** Utility program to convert an encoded file to ISO-8859-1 encoding >(default encoding > * on Solaris and Windows english versions. For characters not in the >ISO-8859-1 charset, > * \\uxxxx will be output, where xxxx is the Unicode value of the >character. > * > * @author Michael Zhou > */ >public class UnicodeConverter { > > /** Usage */ > public static void printUsage () { > System.out.println ("\n\nUsage: java UnicodeConverter ><encoding_of_inputfile> <inputfile> <outputfile>\n\n"); > } > > /** Program entry > * @param args the command line arguments > */ > public static void main (String args[]) { > if (args != null && args.length < 3) { > printUsage (); > System.exit (1); > } > > String encoding = args[0]; > String inputfilename = args[1]; > String outputfilename = args[2]; > > BufferedReader reader = null; > BufferedWriter writer = null; > > try { > reader = new BufferedReader ( > new InputStreamReader ( > new FileInputStream (inputfilename), >encoding)); > writer = new BufferedWriter ( > new OutputStreamWriter ( > new FileOutputStream (outputfilename), >"ISO-8859-1")); > > String line = null; > while ((line = reader.readLine ()) != null) { > for (int i=0; i<line.length (); i++) { > if (line.charAt (i) < 128) > writer.write (line.charAt (i)); > else { > writer.write ("\\u"); > writer.write (Integer.toHexString (line.charAt >(i))); > } > } > writer.write ("\n"); > } > } > catch (FileNotFoundException ex) { > System.out.println ("File Not Found Exception:"); > ex.printStackTrace (); > } > catch (UnsupportedEncodingException ex) { > System.out.println ("Unsupported Encoding Exception:"); > ex.printStackTrace (); > } > catch (IOException ex) { > System.out.println ("IO Exception:"); > ex.printStackTrace (); > } > finally { > try { > reader.close (); > writer.close (); > } > catch (Exception ex) { > System.out.println ("File close failed."); > ex.printStackTrace (); > } > } > } > >} > >//----------------- UnicodeReverseConverter.java ----------------------- >import java.io.*; > >/** Utility program to convert an ISO-8859-1 encoded file to another >encoding, ie, convert > * all \\uxxxx chars back to their Unicode chars. > * > * @author Michael Zhou > */ >public class UnicodeReverseConverter { > > /** Usage */ > public static void printUsage () { > System.out.println ("\n\nUsage: java UnicodeReverseConverter ><encoding_of_outputfile> <inputfile> <outputfile>\n\n"); > } > > /** Program entry > * @param args the command line arguments > */ > public static void main (String args[]) { > if (args != null && args.length < 3) { > printUsage (); > System.exit (1); > } > > String encoding = args[0]; > String inputfilename = args[1]; > String outputfilename = args[2]; > > BufferedReader reader = null; > BufferedWriter writer = null; > > try { > reader = new BufferedReader ( > new InputStreamReader ( > new FileInputStream (inputfilename), >"ISO-8859-1")); > writer = new BufferedWriter ( > new OutputStreamWriter ( > new FileOutputStream (outputfilename), >encoding)); > > String line = null; > outer: while ((line = reader.readLine ()) != null) { > int index = line.indexOf ("\\u"); > while (index > -1) { > writer.write (line.substring (0, index)); > // if there are not enough chars left, an exception will >be thrown > String temp = line.substring (index + 2, index + 6); > // exceptions could be thrown if convertion failed. > writer.write ((char) Integer.valueOf (temp, 16).intValue >()); > if (index + 6 > line.length ()) { > // end of line > writer.write ("\n"); > continue outer; > } > line = line.substring (index + 6); > index = line.indexOf ("\\u"); > } > writer.write (line); > writer.write ("\n"); > } > } > catch (FileNotFoundException ex) { > System.out.println ("File Not Found Exception:"); > ex.printStackTrace (); > } > catch (UnsupportedEncodingException ex) { > System.out.println ("Unsupported Encoding Exception:"); > ex.printStackTrace (); > } > catch (IOException ex) { > System.out.println ("IO Exception:"); > ex.printStackTrace (); > } > catch (Exception ex) { > System.out.println ("General exception: "); > ex.printStackTrace (); > } > finally { > try { > reader.close (); > writer.close (); > } > catch (Exception ex) { > } > } > } >} > >//----------------- unicodeGenerator.jsp ----------------------- ><html><title>Convert to Unicode</title> ><head> > ><%@ page contentType='text/html; charset=UTF-8' %> ><%@ page import='java.io.*' %> > ></head> ><body> >Input any language below, press Enter to see Unicode<br> ><FORM ACTION=unicodeGenerator.jsp METHOD=GET> ><INPUT TYPE=TEXT NAME=text> ><INPUT TYPE=HIDDEN NAME=charset VALUE=UTF-8> ></form> ><hr> > ><% > out.println("Unicode:<br>"); > > String charset = request.getParameter("charset"); > if (charset !=null) { > // Get the text paramete > String text = request.getParameter("text"); > > // Now convert it from an array of bytes to an array of characters. > // Do this using the charset that was sent as a hidden field. > // Here we only bother to read the first line. > BufferedReader reader = new BufferedReader( > new InputStreamReader(new StringBufferInputStream(text), >charset)); > text = reader.readLine(); > out.println(toUnicodeEscapeString(text)); > } > >%> > ><%! > private static char toHex(int nibble) { > return hexDigit[(nibble & 0xF)]; > } > private static char[] hexDigit = { > '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' > }; > private static String toUnicodeEscapeString(String str) { > // Modeled after the code in java.util.Properties.save() > StringBuffer buf = new StringBuffer(); > int len = str.length(); > char ch; > for (int i = 0; i < len; i++) { > ch = str.charAt(i); > switch (ch) { > case '\\': buf.append("\\\\"); break; > case '\t': buf.append("\\t"); break; > case '\n': buf.append("\\n"); break; > case '\r': buf.append("\\r"); break; > > default: > //if (ch >= ' ' && ch <= 127) { > //buf.append(ch); > //} > //else { > buf.append('\\'); > buf.append('u'); > buf.append(toHex((ch >> 12) & 0xF)); > buf.append(toHex((ch >> 8) & 0xF)); > buf.append(toHex((ch >> 4) & 0xF)); > buf.append(toHex((ch >> 0) & 0xF)); > //} > } > } > return buf.toString(); > } >%> > ></body> ></html> > >-----Original Message----- >From: Vernon Wu [mailto:[EMAIL PROTECTED]] >Sent: Wednesday, May 22, 2002 9:06 PM >To: Tag Libraries Users List; Michael Zhou >Subject: Re: RE: Usage of i18n in JSTL > > >Hi, Michael, > >Thanks for sharing information. > >If my understanding is correct, the solution you mentioned is for changing >locale during a session. I have tried to use >your code, but can't test it out since one more class is needed to get it >running. > >I use the lastest JSTL build as Jan suggests and the two problems are >resolved. (~/ > >Have you encountered any situation that messages come from the server? If >so, do you create another set of resource >bundle? > >BTW, where is a good site to find out the mapping between Chinese character >and unicode? > >Best regards, > >Vernon > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>