从用“iso-8859-1”编码的浏览器发布的字符,但它应该是“UTF-8”

Posted

技术标签:

【中文标题】从用“iso-8859-1”编码的浏览器发布的字符,但它应该是“UTF-8”【英文标题】:characters posted from browser encoded with "iso-8859-1" however it should be "UTF-8" 【发布时间】:2015-02-26 20:58:21 【问题描述】:

我想从前端网站上的用户输入中获取消息,发布的表单应该用“UTF-8”编码,但是,spring mvc 控制器获取用“iso-8859-1”编码的对象,我必须将所有字符串分别转换为“UTF-8”。真的很丑很不方便。

**Request Headers**
POST /feedback HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/feedback
**Form Data**
(Please ignore)
**Response Headers**
Content-Language:zh-CN
Content-Type:text/html;charset=UTF-8

我的控制器是:

@RequestMapping(value = "/feedback", method = RequestMethod.POST, produces = "text/plain;charset=UTF-8")
public ModelAndView quizStart(@ModelAttribute("userComments") UserComments userComments) 
    System.out.println(userComments.toString()); //*output 1*
    try 
        System.out.println(String.format("User comments: %s", new String(userComments.toString().getBytes("iso-8859-1"), "UTF-8"))); //*output 2*
     catch (UnsupportedEncodingException e) 
        e.printStackTrace();
    
    return new ModelAndView("user_feedback");

输出 1 不是预期的,因为它是用“iso-8859-1”编码的,输出 2 是正确的,但几乎不可能将所有对象一个一个转换为“UTF-8”。

除了将消息一一转换之外,任何人都可以帮助提供更好的解决方案吗?

非常感谢。

【问题讨论】:

在这种情况下使用编码过滤器。 ***.com/questions/5141403/… 你使用的是什么版本的 Spring Boot? @DaveSyer spring boot 1.1.4.RELEASE. 为什么不是 1.1.10?还是 1.2.0? @DaveSyer 如果我将其更改为 1.1.10 或 1.2.0,它不起作用并遇到同样的问题 【参考方案1】:

我定义的编码过滤器参考this document。它有效。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

@Configuration
public class FiltersConfig 

    @Bean
    public CharacterEncodingFilter characterEncodingFilter() 
        final CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return characterEncodingFilter;
    


【讨论】:

【参考方案2】:

如果您需要在 UTF-8 和 ISO-8859-1 之间转换字符串,请查看我的回答 here。

【讨论】:

以上是关于从用“iso-8859-1”编码的浏览器发布的字符,但它应该是“UTF-8”的主要内容,如果未能解决你的问题,请参考以下文章

Python ISO-8859-1 编码

使用 NSString 将 UTF-8 编码转换为 ISO 8859-1 编码

如何使用正确的字符编码在 jQueryMobile 1.3.1 中通过 AJAX 加载 ISO-8859-1 内容?

怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

使用 .NET 如何将包含 Latin-1 重音字符的 ISO 8859-1 编码文本文件转换为 UTF-8

JDBC iso-8859-1 编码