【发布时间】:2012-06-11 19:18:42
【问题描述】:
我正在使用 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() 中的值时,也会发生同样的情况。在调试窗口中,我可以看到变量包含正确的字符,但我打印出来或尝试将其存储在数据库中,它是随机字符。
我不知道为什么会有这样的行为,这阻止了我读取提交的表单值并将它们存储到数据库中。有人可以对此提供一些提示吗?
非常感谢。
【问题讨论】:
-
我不明白您是否担心服务器控制台和日志上的输出损坏,或浏览器响应结果中的输出损坏。你能澄清一下吗?
-
System.getProperty("file.encoding")的值是多少? -
我担心的是在调试窗口中我可以看到正确的编码,但是当我将变量传递给我的数据库访问对象并将其存储到数据库时,它会变成随机字符。所以后来我发现在处理请求的方法中,即使简单的打印出UTF-8 Enum值也行不通。
-
您怎么知道实际存储在数据库中的值是垃圾,而在从数据库中检索期间该值可能已损坏?
标签: java jsp tomcat utf-8 request