/* * Copyright (c) 2002-2003 Che, Dong Email: chedongATbigfoot.com/chedongATchedong.com * $Id: HelloUnicodeServlet.java,v 1.4 2003/04/19 03:34:39 chedong Exp $ */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 一个简单的Servlet试验:用于说明如何自动根据HTTP头中的"Accept-Language" * 检测客户端的语言字符集设置,正确的将请求中的内容解码,并将内容用正确的 * 编码方式编码反馈给客户端。 * * @author Che, Dong */ public class HelloUnicodeServlet extends HttpServlet { /** * Brower language detection demo * @param req HTTP Servlet Request * @param res HTTP Servlet Response * @throws ServletException servlet error * @throws IOException io error */ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String clientLanguage = req.getHeader("Accept-Language"); /* * comment following code to disable brower language detection */ if (clientLanguage.equals("zh-cn")) { //for Simplied Chinese req.setCharacterEncoding("GBK"); res.setContentType("text/html; charset=GBK"); } else if (clientLanguage.equals("zh-tw")) { //for Traditional Chinese req.setCharacterEncoding("BIG5"); res.setContentType("text/html; charset=BIG5"); } else { //default encoding req.setCharacterEncoding("ISO-8859-1"); res.setContentType("text/html; charset=ISO-8859-1"); } //defualt hello string String hello = "hello world"; if (req.getParameter("hello") != null) { hello = req.getParameter("hello").trim(); } PrintWriter pw = res.getWriter(); pw.println( ""); pw.println(""); pw.println("
"); pw.println(""); System.getProperties().list(pw); pw.println(""); pw.println(""); pw.close(); } /** * print char array * @param inStr input String * @return String output String */ private static String getCharArray(String inStr) { char[] myBuffer = inStr.toCharArray(); StringBuffer sb = new StringBuffer(); //list each Charactor in byte value, short value, and UnicodeBlock Mapping for (int i = 0; i < inStr.length(); i++) { byte b = (byte) myBuffer[i]; short s = (short) myBuffer[i]; String hexB = Integer.toHexString(b).toUpperCase(); String hexS = Integer.toHexString(s).toUpperCase(); //print char sb.append("char["); sb.append(i); sb.append("]='"); sb.append(myBuffer[i]); sb.append("'\t"); //byte value sb.append("byte="); sb.append(b); sb.append(" \\u"); sb.append(hexB); sb.append('\t'); //short value sb.append("short="); sb.append(s); sb.append(" \\u"); sb.append(hexS); sb.append('\t'); //Unicode Block sb.append(Character.UnicodeBlock.of(myBuffer[i])); sb.append("