Spring MVC问号代替抛光letters.with Charset或java编码(波兰语字母)

时间:2016-12-27 17:45:32

标签: java spring jsp spring-mvc character-encoding

在我的Spring MVC项目中,我有几个带有定义字符集的.jsp视图,如下所示:

<%@ page language="java" contentType="text/html; charset=windows-1250"
pageEncoding="windows-1250" session="true" %>

在元素中还有一个元:

<meta charset="windows-1250">

我正在使用eclipse和tomcat 8进行实现和调试。在web.xml中,我已经定义了这样的编码过滤器:

<filter>  
    <filter-name>encodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
       <param-name>encoding</param-name>  
       <param-value>WINDOWS-1250</param-value>  
    </init-param>  
    <init-param>  
       <param-name>forceEncoding</param-name>  
       <param-value>true</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

在我的Controller类中(在相应的RequestMapper中)我正在打印一些字符集:

System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());

当我在.jsp视图中传递一些抛光字母(通过ModelAtribute传递)时,例如:控制器中的abcdeęść(以及数据库中的结果)打印值为: abcde ??? 。上面的System.out.printlns ...的输出是:

Default Charset=windows-1250
file.encoding=windows-1250
Default Charset=windows-1250
Default Charset in Use=Cp1250

任何有关那些波兰字母问题的想法?

修改 使用UTF-8定义的相同输出

Default Charset=UTF-8
file.encoding=UTF-8
Default Charset=UTF-8
Default Charset in Use=UTF8

字符串abcdeąść印刷为:abcdeÄÅÄ

编辑:

当我将所有编码更改为UTF-8时,问题是相同的。但是,我注意到了什么: 当我首先解码ISO-8859-1中的文本然后将其编码为UTF-8时,保存的值为确定

byte ptext[] = email.getBytes(Charset.forName("ISO-8859-1")); 
String value = new String(ptext, Charset.forName("UTF-8")); 
System.out.println("Value email: " + value);

在每个.jsp文件中,我有那些带有UTF-8字符集的行,文件以UTF-8编码,java类也以某种方式编码.jsp格式的值在ISO-8859-1中。怎么可能?

1 个答案:

答案 0 :(得分:0)

我测试了,我看到波兰字符串显示正确,具有以下配置..

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

也在head标签内

<meta charset="utf-8">

和我的编码过滤器配置

CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
http.addFilterBefore(filter, CsrfFilter.class);
http.csrf().disable();

所以我认为如果你改变一切你会没事的。此外,我的配置不在xml中,但除了编码字符串部分外,它与您可以看到的相同。

我在Eclipse中的Java filles编码是UTF-8。