gpt4 book ai didi

Java代码将特殊字符转换为垃圾字符

转载 作者:行者123 更新时间:2023-12-01 23:53:06 26 4
gpt4 key购买 nike

我面临一个问题,当我从 Java 程序发布带有特殊字符的 json 消息时,该特殊字符(例如 O'Reilly 中的 ')会被替换为 ?。如果我从 postman 处发布相同的消息,我会得到正确的回复。您能否建议如何处理这个问题?

谢谢。

下面是我正在使用的代码和 json:

{ "lastName":"O’Reilly", "firstName":"Shaun"}

package rest_apis;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class IDQ_tranformation_cd {

public static void main(String args[]){
String json_req="{"lastName":"O’Reilly","firstName":"Shaun"}";

try{
CloseableHttpClient httpclient = HttpClients.createDefault();
String instanceUrl = "https://my-end-point";
URIBuilder builder = new URIBuilder(instanceUrl);

StringEntity params =new StringEntity(json_req);
HttpPost post_data = new HttpPost(builder.build());

post_data.addHeader("Content-Type","application/json");
post_data.addHeader("Accept", "application/json");

post_data.setEntity(params);

HttpResponse queryResponse = httpclient.execute(post_data);
int Out_RespCd = queryResponse.getStatusLine().getStatusCode();
HttpEntity httpEntity = queryResponse.getEntity();

System.out.println(Out_RespCd +":"+EntityUtils.toString(httpEntity));
} catch (Exception e) {
System.out.println("Exception :"+e.toString());
}
}
}

我期望正确的输出为(当我使用 postman 时我能够得到这个):

{"lastName":"O’Reilly","firstName":"Shaun"}

但是当我使用java代码时我得到了这个('替换为?)

{"lastName":"O?Reilly","firstName":"Shaun"}

最佳答案

尝试更改您的线路:

post_data.addHeader("Content-Type","application/json");

post_data.addHeader("Content-Type","application/json; charset=utf-8");

另外,也有可能你获取的数据正常,只是显示不正确。多次帮助我诊断类似问题的方法是将“有问题的”字符串转换为 unicode 序列。在那里您可以看到数据本身是否正确,只有显示损坏或数据本身损坏。有一个开源 java 库 MgntUtils,它有一个实用程序,可以将字符串转换为 unicode 序列,反之亦然:

result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);

这段代码的输出是:

\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World

可以在 Maven Central 找到该库或在 Github它作为 Maven 工件提供,并带有源代码和 JavaDoc

这是类 StringUnicodeEncoderDecoder 的 JavaDoc 。同样在那个库中,有一个非常简单的 Http client .

关于Java代码将特殊字符转换为垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58214343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com