Dón*_*nal 56 java json spring-mvc character-encoding
我的Java Web应用程序提交了一个返回JSON的AJAX请求:
{'value': 'aériennes'}
Run Code Online (Sandbox Code Playgroud)
当'aériennes'显示在网页上时,它显示为'a riennes',所以我猜有某种字符编码问题.AJAX响应头包括
Content-Type application/json
Run Code Online (Sandbox Code Playgroud)
它似乎不包含任何字符集信息.我想这需要改成类似的东西
Content-Type text/html; charset=iso-8859-1 (or charset=utf8)
Run Code Online (Sandbox Code Playgroud)
应用程序的服务器端是Spring MVC,我想必须有一种方法为每个响应设置默认字符集?
Bal*_*usC 57
这些症状表明最初采用UTF-8编码的JSON字符串使用ISO-8859-1编码写入HTTP响应,并指示webbrowser将其显示为UTF-8.如果它是使用UTF-8编写并显示为ISO-8859-1,那么你会看到aériennes
.如果它是使用ISO-8859-1 编写和显示的,那么你会看到a�riennes
.
要解决JSON字符串错误地写为ISO-8859-1的问题,您需要将webapp/Spring配置为使用UTF-8作为HTTP响应编码.基本上,它应该在封面下做以下事项:
response.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
请勿更改内容类型标题.这对于JSON来说非常好,它被显示为UTF-8.
Lar*_*sen 32
我不知道这是否相关,但我用@RequestMapping注释修复了它.
@RequestMapping(method=RequestMethod.GET, produces={"application/json; charset=UTF-8"})
Run Code Online (Sandbox Code Playgroud)
Tha*_*tos 16
首先,您发布的数据无效JSON.这将是:
{"value": "aériennes"}
Run Code Online (Sandbox Code Playgroud)
请注意双引号:它们是必需的.
JSON数据的Content-Type 应该是 application/json
.实际的JSON数据(我们上面提到的)应该使用UTF-8,UTF-16或UTF-32进行编码 - 我建议使用UTF-8.
您可以使用Wireshark之类的工具来监控网络流量并查看数据的外观,您应该看到c3 89
é 的字节数.我从来没有使用过Spring,但是如果它正在进行JSON编码,那么对你来说这可能是正确的.
一旦JSON到达浏览器,它应该是好的,如果它是有效的.但是,如何将JSON响应中的数据插入到网页中?
小智 9
最后我得到了解决方案:
只把这一行
@RequestMapping(value = "/YOUR_URL_Name",method = RequestMethod.POST,produces = "application/json; charset=utf-8")
Run Code Online (Sandbox Code Playgroud)
这肯定会有所帮助.
小智 6
发生在我身上的情况完全相同:
<%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
但这对我有用:
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
尝试添加
;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
到您的contentType.
归档时间: |
|
查看次数: |
163802 次 |
最近记录: |