如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在悬停中使用velocity.js?

velocity输出时如何不转义符号

Velocity初探小结--Velocity在spring中的配置和使用

模板引擎:Velocity&FreeMarker(转)

如何使用 Velocity 模板语言检查数组中是不是存在值

如何在velocity对数字和日期进行格式化