Java 如何在Velocity上配置UTF-8?
使用Java、servlet、MySQL、Tomcat和Velocity,采取了以下步骤:Java 如何在Velocity上配置UTF-8?,java,servlets,character-encoding,velocity,Java,Servlets,Character Encoding,Velocity,使用Java、servlet、MySQL、Tomcat和Velocity,采取了以下步骤: velocity.properties: input.encoding=UTF-8 output.encoding=UTF-8 server.xml URIEncoding=UTF-8 字符集 meta http equiv=“Content Type”Content=“text/html;CHARSET=UTF-8” eclipse属性、项目属性、文件和编辑器编码 设置所有适用于UTF-
- velocity.properties:
- input.encoding=UTF-8
- output.encoding=UTF-8
- server.xml
- URIEncoding=UTF-8
字符集- 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代码:
- 请求。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
对象中
这是如何导致的,我如何解决它?要正确解释参数,需要tomcat将URL解析为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"/>
要正确解释参数,tomcat需要将URL解析为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"/>
您将获得在浏览器认为正确的编码中编码的参数。不过,问题可能是基于奇怪的浏览器配置或xml头,如果这曾经是带有iso编码的XHTML,则可能需要xml头。您将获得在浏览器认为正确的编码中编码的参数。不过,问题可能是基于奇怪的浏览器配置或xml头,如果这曾经是带有iso编码的XHTML,则可能需要xml头。症状表明您(或Velocity)没有在HTTP响应内容类型头中设置字符集属性。请注意,当通过HTTP提供页面服务时,
标记被忽略。相反,将使用HTTP响应内容类型头的charset属性(如果有)。
标记仅在用户将网页保存到其本地磁盘,然后通过文件://
从磁盘查看网页时使用。您的问题可能需要在Velocity方面得到解决。好的,所以我扩展了VelocityLayoutServlet只是为了设置响应字符编码,并打印标题以获得“Content-Type:text/html;charset=UTF-8”。正如我在最初的帖子中提到的(在管理员编辑之前),这个问题是从客户端到服务器发生的,而不是从另一个角度,即在保存表单数据时发生的,因此,上面定义的函数具有积极的效果。感谢症状表明您(或Velocity)没有在HTTP响应内容类型
标题中设置字符集
属性。请注意,当通过HTTP提供页面服务时,
标记被忽略。相反,将使用HTTP响应内容类型头的charset属性(如果有)。
标记仅在用户将网页保存到其本地磁盘,然后通过文件://
从磁盘查看网页时使用。您的问题可能需要在Velocity方面得到解决。好的,所以我扩展了VelocityLayoutServlet只是为了设置响应字符编码,并打印标题以获得“Content-Type:text/html;charset=UTF-8”。正如我在最初的帖子中提到的(在管理员编辑之前),这个问题是从客户端到服务器发生的,而不是从另一个角度,即在保存表单数据时发生的,因此,上面定义的函数具有积极的效果。谢谢