【发布时间】:2011-12-09 23:49:45
【问题描述】:
使用 Java、Servlets、MySQL、Tomcat 和 Velocity,采取了以下步骤:
- 速度.属性:
- input.encoding=UTF-8
- output.encoding=UTF-8
- server.xml
- URIEncoding = UTF-8
-
<html><head>字符集- meta http-equiv="Content-Type" content="text/html;CHARSET=UTF-8"
- eclipse 属性、项目属性、文件和编辑器编码
- 设置所有适用于 UTF-8
- JDBC 连接:
- db.url=jdbc:mysql://:/?useEncoding=true&characterEncoding=UTF-8
- java/servlet 代码:
- request.setCharacterEncoding(UTF-8)
以上所有方法均无效。直到完成以下代码:
private String getParameter(String key) {
String param = request.getParameter(key);
if (Util.isNotEmpty(param)) {
try {
return new String(param.getBytes("8859_1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return param;
}
return null;
}
上面的意思是request.setCharacterEncoding没有效果(getCharacterEncoding()确实返回UTF-8);知道请求包装器包装在 ThreadLocal 对象中。
这是怎么引起的,我该如何解决?
【问题讨论】:
-
症状表明您(或 Velocity)没有在 HTTP 响应
Content-Type标头中设置charset属性。请注意,当通过 HTTP 提供页面时,<meta>标记将被忽略。相反,将使用 HTTP 响应 Content-Type 标头的 charset 属性(如果有)。<meta>标签仅在用户将网页保存到其本地磁盘并稍后通过file:///从磁盘上查看时使用。您的问题可能需要在 Velocity 方面得到解决。 -
好的,所以我扩展 VelocityLayoutServlet 只是为了设置响应字符编码,并打印标题以获得“Content-Type:text/html;charset=UTF-8”。正如我在原始帖子中提到的(在管理员编辑之前),这个问题是从客户端到服务器而不是其他方式发生的,即在保存表单数据时,因此,上面定义的函数的积极作用。谢谢
标签: java servlets character-encoding velocity