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



我遇到了一个问题,当我从 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());
} 
}
}

我希望正确的输出为(当我使用邮递员时,我能够得到这个(:

{"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);

此代码的输出为:

u0048u0065u006cu006cu006fu0020u0057u006fu0072u006cu0064
Hello World

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

。这是 StringUnicodeEncoderDecoder 类的 JavaDoc。同样在该库中,有一个非常简单的 Http 客户端。

谢谢大家的帮助。它在代码中更改以下行后工作:

StringEntity params =new StringEntity(json_req,"UTF-8");

下面的文章非常有帮助。

带有 StringEntity 的 HttpPost 具有特殊字符,例如 ,®看到 ¿1/2' 而不是 ®

最新更新