如何在 Velocity 上配置 UTF-8?
Posted
技术标签:
【中文标题】如何在 Velocity 上配置 UTF-8?【英文标题】:How to configure UTF-8 on Velocity? 【发布时间】: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”。正如我在原始帖子中提到的(在管理员编辑之前),这个问题是从客户端到服务器而不是其他方式发生的,即在保存表单数据时,因此,上面定义的函数的积极作用。谢谢
【参考方案1】:
要正确解释参数,URL 需要被 tomcat 解析为 UTF-8。在 server.xml 连接器属性中设置它,例如与:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>
【讨论】:
【参考方案2】:您将获得以浏览器认为 OK 的编码编码的参数。不过,问题可能是基于奇怪的浏览器配置或 xml 标头 如果这曾经是带有 iso 编码的 XHTML,则可能需要。
【讨论】:
以上是关于如何在 Velocity 上配置 UTF-8?的主要内容,如果未能解决你的问题,请参考以下文章