java json设置编码_java-JSON字符编码

java-JSON字符编码

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

10个解决方案

55 votes

症状表明,最初使用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。

BalusC answered 2019-12-28T00:53:20Z

31 votes

我不知道这是否有意义,但是我使用@RequestMapping批注对其进行了修复。

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

Lars Juel Jensen answered 2019-12-28T00:53:40Z

15 votes

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

{"value": "aériennes"}

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

JSON数据的Content-Type应该为c3 89。实际的JSON数据(上面已包含)应使用UTF-8,UTF-16或UTF-32进行编码-我建议使用UTF-8。

您可以使用Wireshark之类的工具监视网络流量并查看数据外观,您应该看到é的字节c3 89。 我从来没有使用过Spring,但是如果它正在执行JSON编码,那么可能会为您妥善处理。

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

Thanatos answered 2019-12-28T00:54:19Z

8 votes

终于我得到了解决方案:

只把这行

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

这肯定会有所帮助。

AbdulHayee answered 2019-12-28T00:54:47Z

5 votes

我发生的事情与此完全相同:

但这对我有用:

尝试添加

;charset=UTF-8

到您的contentType。

Jorge Carretero answered 2019-12-28T00:55:20Z

3 votes

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

ton answered 2019-12-28T00:55:35Z

1 votes

尽管答案并不完全相关,但这里的答案帮助我解决了我的问题。我使用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依赖项。

Alexandre Pimentel answered 2019-12-28T00:56:05Z

0 votes

如果您使用的是StringEntity,请使用选择的字符编码尝试一下。 它也处理外来字符。

craned answered 2019-12-28T00:56:25Z

0 votes

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

@Controller

@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})

public class MyController{

...

}

Yuri Gavrysh answered 2019-12-28T00:56:45Z

0 votes

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

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

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

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

class="org.springframework.http.converter.StringHttpMessageConverter">

text/plain;charset=UTF-8

(在这里找到:[http://forum.spring.io/forum/spring-projects/web/74209-responsebody-and-utf-8)]

Erando answered 2019-12-28T00:57:18Z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值