/* * 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("