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

时间:2014-12-30 17:24:43

标签: java html spring-mvc utf-8 spring-boot

我想从前端网站上的用户输入获取消息,发布的表单应该用“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”。

除了逐个转换消息之外,还有人可以提供更好的解决方案吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

我定义了编码过滤器,请参考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;
    }

}

答案 1 :(得分:0)

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