繁体   English   中英

JSON字符编码

[英]JSON character encoding

我的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,我想必须有一种方法为每个响应设置默认字符集?

这些症状表明最初采用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");

请勿更改内容类型标题。 这对于JSON来说非常好,它被显示为UTF-8。

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

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

首先,您发布的数据无效JSON。 这将是:

{"value": "aériennes"}

请注意双引号:它们是必需的。

JSON数据的Content-Type 应为 application/json 实际的JSON数据(我们上面提到的)应该使用UTF-8,UTF-16或UTF-32进行编码 - 我建议使用UTF-8。

您可以使用Wireshark之​​类的工具来监控网络流量并查看数据的外观,您应该看到é的字节c3 89 我从来没有使用过Spring,但是如果它正在进行JSON编码,那么对你来说这可能是正确的。

一旦JSON到达浏览器,它应该是好的,如果它是有效的。 但是,如何将JSON响应中的数据插入到网页中?

最后我得到了解决方案:

只把这一行

@RequestMapping(value = "/YOUR_URL_Name",method = RequestMethod.POST,produces = "application/json; charset=utf-8")

这肯定会有所帮助。

发生在我身上的情况完全相同:

<%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>

但这对我有用:

<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>

尝试添加

 ;charset=UTF-8

到您的contentType。

response.setContentType("application/json;charset=utf-8");

这里的答案帮助我解决了我的问题,虽然它并没有完全相关。 我使用javax.ws.rs API和@Produces和@Consumes注释并遇到同样的问题 - 我在webservice中返回的JSON不是UTF-8。 我在控制器功能的基础上使用以下注释解决了它:

@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")

@Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")

在每个端点的get和post函数上。 我没有设置字符集,这解决了它。 这是球衣的一部分,所以也许你必须添加一个maven依赖。

如果您使用StringEntity尝试这个 ,使用的字符编码的选择。 它也处理外来字符。

此外,您可以使用控制器类上方的Spring注释RequestMapping来接收application / json; utf-8在所有响应中

@Controller
@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})
public class MyController{
 ...
}

如果上面建议的解决方案没有解决您的问题(就我而言),这也有助于:

我的问题是我使用Springs @ResponseBody在我的响应中返回了一个json字符串。 如果你这样做也可能有所帮助。

将以下bean添加到调度程序servlet。

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean
                class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </list>
    </property>
</bean>

(在此处找到: http//forum.spring.io/forum/spring-projects/web/74209-responsebody-and-utf-8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM