从用“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”的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSString 将 UTF-8 编码转换为 ISO 8859-1 编码
如何使用正确的字符编码在 jQueryMobile 1.3.1 中通过 AJAX 加载 ISO-8859-1 内容?
怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?