瓷砖编码问题

时间:2010-03-03 11:57:15

标签: encoding utf-8 tiles iso-8859-1

我正在尝试对我正在开发的Spring应用程序使用UTF-8编码,但是在从tile中插入属性时遇到正确的编码时遇到了问题。

我在JSP模板中有这个片段:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title><tiles:getAsString name="title" /></title>   
</head>
<body>
    <tiles:insertAttribute name="header" ignore="true" />
....

在我的tiles XML配置文件中,我有类似的东西:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
   <definition name="tiles:base" template="/WEB-INF/views/templates/main.jsp">
     <put-attribute name="title" value="Título" />
...

我在eclipse中检查过这个文件是否有UTF-8编码。 尽管JSP的其余部分是正确的(例如插入头部的JSP片段),但在页面中未正确显示title属性中传递的单词(重音字符以错误的方式显示)。如果我将编码更改为ISO-8859-1标题是正常的,但页面的其余部分是错误的。我似乎无法在我的tile文件中将编码更改为UTF-8。我还在我创建的文件中查找了“ISO-8859-1”,但我没有在任何文件中设置此配置。

有谁能告诉我如何为瓷砖设置正确的编码?

由于

4 个答案:

答案 0 :(得分:9)

将以下内容添加到web.xml。这与在每个JSP文件中添加标头具有相同的效果。

的web.xml:

<web-app>
    ...
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
            <trim-directive-whitespaces>true</trim-directive-whitespaces>
        </jsp-property-group>
    </jsp-config>    
</web-app>

答案 1 :(得分:3)

这是charset的问题,而不是编码。我不得不设置

<%@ page contentType="text/html; charset=utf-8"%> 

在每个JSP中都有效。我不知道在Spring Web应用程序的所有JSP中是否有更简单的配置方法。

答案 2 :(得分:1)

另一种方法是使用 ReloadableResourceBundleMessageSource (具有属性defaultEncoding =“UTF-8”)也可以用于从tile中插入的内容。

我的意思是你可以从tiles中传递一个关键字,然后用它来输出资源包中所需的内容,如下所示:

<tiles:useAttribute id="title_key" name="title"/>
<spring:message code="${title_key}"/>

答案 3 :(得分:1)

在我的Struts 2.3到2.5迁移期间,我遇到了类似的问题: 现在,JSP引用的所有javascript .JS文件的content-type(在响应标头中)为“ application / javascript; charset = ISO-8859-1”(struts 2.5),而不是charset = UTF-8(在struts 2.3中)。 对于JSP和引用js文件的脚本标记,Charset属性设置为utf-8。

我添加了Leonel的代码,它终于起作用了: 但编码现在为“ text / html; charset = UTF-8”。因此,我丢失了应用程序/ javascript。它不能正常工作。

<web-app>
...
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.js</url-pattern>
        <page-encoding>UTF-8</page-encoding>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>    

所以我尝试了其他方法: https://www.baeldung.com/tomcat-utf-8 有了这个,我得到了正确的字符集和内容类型。

让我们定义一个名为CharacterSetFilter的类:

public class CharacterSetFilter implements Filter {

// ...

public void doFilter(
  ServletRequest request, 
  ServletResponse response, 
  FilterChain next) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    next.doFilter(request, response);
}

// ...
}

我们需要将过滤器添加到应用程序的web.xml中,以便将其应用于所有请求和响应:

<filter>
 <filter-name>CharacterSetFilter</filter-name>
 <filter-class>com.baeldung.CharacterSetFilter</filter-class>
</filter>

<filter-mapping>
 <filter-name>CharacterSetFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>