【问题标题】:Spring MVC question marks instead polish letters.with Charset or java encoding (polish letters)Spring MVC 问号改为波兰字母。使用 Charset 或 java 编码(波兰字母)
【发布时间】: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


【解决方案1】:

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

<%@ 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 填充编码是 UTF-8。

【讨论】:

  • 我做了你上面描述的,但它不起作用。但我取得了一些进展。当我首先从 ISO-8859-1 解码文本然后将其编码为 UTF-8 打印和保存的值是可以的: byte ptext[] = email.getBytes(Charset.forName("ISO-8859-1"));字符串值 = new String(ptext, Charset.forName("UTF-8")); System.out.println("价值邮箱:" + value);
  • 在每个 .jsp 文件中,我都有那些带有 UTF-8 字符集的行,文件以 UTF-8 编码,java 类或者 .jsp 形式的值在某种程度上是 ISO-8859-1 .这怎么可能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2019-04-02
  • 1970-01-01
  • 2018-07-07
  • 2018-07-19
  • 2018-05-31
  • 2017-10-03
相关资源
最近更新 更多