【发布时间】:2017-05-12 00:14:37
【问题描述】:
在我的 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 时,打印和保存的值是 OK:
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。这怎么可能?
【问题讨论】:
-
你试过'iso-8859-1'还是'UTF8'?
-
对于 UTF-8 的问题几乎是一样的。我在上面添加了一些有问题的细节。
标签: java spring jsp spring-mvc character-encoding