JSON 字符编码

2022-08-31 15:35:06

我的 Java Web 应用程序提交一个返回 JSON 的 AJAX 请求,如下所示:

{'value': 'aériennes'}

当“aériennes”显示在网页中时,它显示为“a riennes”,所以我猜存在某种字符编码问题。AJAX 响应标头包括

Content-Type    application/json

它似乎不包含任何字符集信息。我想这需要改成类似的东西

Content-Type    text/html; charset=iso-8859-1      (or charset=utf8)

该应用程序的服务器端是Spring MVC,我想一定有一种方法可以为每个响应设置默认字符集?


答案 1

症状表明,最初采用 UTF-8 编码的 JSON 字符串已使用 ISO-8859-1 编码写入 HTTP 响应,并指示 Web 浏览器将其显示为 UTF-8。如果它是使用 UTF-8 编写的,并显示为 ISO-8859-1,那么您就会看到 .如果它是使用ISO-8859-1编写显示的,那么您会看到.aériennesa�riennes

要修复JSON字符串被错误地写入ISO-8859-1的问题,您需要将webapp / Spring配置为使用UTF-8作为HTTP响应编码。基本上,它应该在幕后执行以下操作:

response.setCharacterEncoding("UTF-8");

请勿更改内容类型标头。它非常适合JSON,它被显示为UTF-8。


答案 2

我不知道这是否再相关,但我用@RequestMapping注释修复了它。

@RequestMapping(method=RequestMethod.GET, produces={"application/json; charset=UTF-8"})