我正在使用 java/jsp/tomcat/mysql 开发一个简单的 Web 应用程序,最大的问题在于字符编码,因为我需要处理 UTF-8 编码而不是默认的 8851。
首先,我想描述一下我的程序结构。我正在使用一个名为 Controller.java 的 Servlet 来处理所有请求。所以在 web.xml 中,我有一个 Controller servlet,它接受来自 *.do 的所有请求。
然后这个Controller会根据请求的URL来分发请求,例如,如果客户端请求register.do,Controller就会将请求分发到Register.java。
而在Register.java中,有一个以请求为参数的方法,即:
public String perform(HttpServletRequest request) {
do something with the request...
}
所以问题是如果我想在这个方法中以 UTF-8 打印一些东西,它会给出随机字符。例如,我有一个 Enum 存储了几个常量,Enum 的属性之一是它的繁体中文名称。如果我打印它
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
中文打印正确。但是,如果我将确切的代码放入处理 HttpServletRequest 的方法中:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
它们被打印为随机字符,但我可以从调试窗口(eclipse)中看到变量包含正确的汉字。
因此,当我想存储 request.getParameter() 中的值时,也会发生同样的情况。在调试窗口中,我可以看到该变量包含正确的字符,但是我将其打印出来或尝试将其存储在数据库中,它是随机字符。
我不知道为什么行为会这样,这阻止了我读取提交的表单值并将它们存储到数据库中。有人可以对此提供一些提示吗?
十分感谢。