在我的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中。怎么可能?
答案 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。