JSON字符编码

2021/01/14 23:31 · java ·  · 0评论

我的Java Web应用程序提交了一个AJAX请求,该请求返回JSON,例如:

{'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响应,并且指示Web浏览器将其显示为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批注,并遇到了相同的问题-我在Web服务中返回的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")

在每个端点的获取和发布功能上。我没有设置字符集,这解决了它。这是球衣的一部分,因此也许您必须添加一个maven依赖项。

如果您使用的是StringEntitytry this,请选择字符编码。它也处理外来字符。

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

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

如果上述建议的解决方案不能解决您的问题(就我而言),这也可能会有所帮助:

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

将以下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

本文地址:http://java.askforanswer.com/jsonzifubianma.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!