JSON字符编码

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.