POST JSON请求中的字符编码

19

我正在向我的应用程序发送一条POST JSON请求。

POST /CharSetTest/Test HTTP/1.1
Host: localhost:8090
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 1637b92b-5896-4765-63c5-d04ad73ea9f1

{
  "SampleRequest": {
    "FullName": "関連当"
  }
}

我的CXF JAXRS消费者定义如下。

@POST
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")
public Response testCharSet(@Encoded String jsonBody);

但是我发送的POST请求中的日文字符(関連当)没有被编码,并导致一些垃圾字符 "é¢é£å½äºè"

使用SoapUI会出现"?????"字符。

这些垃圾字符因客户端不同而异,取决于我发送请求的客户端。我该如何对我的POST请求进行编码?


你如何发送请求? - njzk2
2
请尝试将您的“Content-Type”设置为“application/json; charset=UTF-8”,然后再次尝试。 - kucing_terbang
@njzk2 我使用Postman Rest Client发送请求。该请求在问题中已经提到。 - Vis
@kucing_terbang 我尝试了,但没有成功 :( - Vis
结果中出现了一些垃圾字符“é¢é£å½äºè”,你如何观察到这个问题?(这可能只是您的输出使用了错误的编码方式) - njzk2
显示剩余3条评论
6个回答

25

将内容类型设置为:

"application/json;charset=UTF-8" 

在使用应用程序发送POST请求时,您可以在该应用程序的URL标头中找到“content-type”。


10
没有一个答案对我有用。
我的内容类型已经设置为"application/json;charset=UTF-8",但我的头部中的"accept-encoding"设置导致了错误:
在头部中禁用"accept-encoding"设置:

enter image description here

当我取消上面的最后一行时,一切都很好!希望能对某些人有所帮助。

你使用什么工具/浏览器来编辑这样的头部? - Mohammad
1
嗨@Mohammad:这个截图来自Postman,它是一个流行的用于发送请求(以及其他事情)的应用程序。它还有一个慷慨的免费层。 - Matt
1
谢谢 @Matt!在大量搜索后,我终于找到了它!!! - Mohammad
这是一个有效的请求头,用于通知服务器,只是在您的情况下该值是错误的。 - Kanagavelu Sugumar

2

我认为您需要使用json_encode()选项,就像这行代码一样

json_encode($data,JSON_UNESCAPED_UNICODE);

Postman以您的语言格式返回消息。

1
我曾遇到类似的问题,通过将 HttpServletResponse 实例的字符编码设置为 utf-8 来解决:
response.setCharacterEncoding("utf-8");

1
尝试这个。
@RequestMapping(value = "/play", method = RequestMethod.POST, produces={"application/json; charset=UTF-8"})

将上述 produces={"application/json; charset=UTF-8"} 设置为你的 @RequestMapping,保留HTML标签。


0
一个技巧是在Postman中利用Pre-request Script。
将以下内容粘贴到Pre-request Script部分。这将转换请求URL中所有参数的编码方式。 因此,所有的+符号都将被编码为%2B
var querycount = pm.request.url.query.count();
for(let i = 0; i < querycount; i++) {
  pm.request.url.query.idx(i).value = encodeURIComponent(pm.request.url.query.idx(i).value);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接