У меня есть сторонний API, который дает мне JSON-ответ
{
"name": "บรีส",
"company": "Таиланд",
}
В ответе выше Json у меня есть некоторые тайские символы,
когда я непосредственно получаю доступ к API, я получаю правильные тайские символы, но когда я вызываю его из моего RestClient, я получаю этот символ как ????
{
"name":"????????????",
"company":"??????????????"
}
Вот мой код RestClient
private void executeRequest(HttpUriRequest request, String url) throws CommonException, IOException{
//logger.debug(CLASS_NAME+" executeRequest : Entry :: url ->"+url + " Request: "+ postData );
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(connectionTimeOut)
.setConnectionRequestTimeout(soTimeOut)
.setSocketTimeout(soTimeOut)
.build();
CloseableHttpClient client;
client = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
.useSystemProperties().build();
HttpContext localContext = new BasicHttpContext();
CloseableHttpResponse httpResponse = null ;
InputStream instream = null;
try {
httpResponse = client.execute(request, localContext);
responseCode = httpResponse.getStatusLine().getStatusCode();
message = httpResponse.getStatusLine().getReasonPhrase();
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
instream = entity.getContent();
response = convertStreamToString(instream);
}
} catch (ClientProtocolException e) {
//logger.debug(CLASS_NAME+" :: executeRequest : ClientProtocolException :: url ->"+url+ " responseCode -> " + responseCode + "message -> " + message + " Service Execution Rime: "+lSvcExecTime+"\n Request -> "+postData + " Exception : "+ e.getMessage() );
throw e;
}catch (SocketException e) {
//logger.debug(CLASS_NAME+" :: executeRequest : SocketException :: url ->"+url+ " responseCode -> " + responseCode + "message -> " + message + " Service Execution Rime: "+lSvcExecTime+"\n Request -> "+postData + " Exception : "+ e.getMessage() );
throw e;
} finally {
if(httpResponse!=null){
httpResponse.close();
}
if(null != instream){
instream.close();
}
}
}
private static String convertStreamToString(InputStream is) throws UnsupportedEncodingException {
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
try {
while((length = is.read(buffer)) != -1){
result.write(buffer,0,length);
}
} catch (IOException e) {
//logger.error(CLASS_NAME+" IOException due to - "+e.getMessage());
} finally {
try {
is.close();
} catch (IOException e) {
//logger.error(CLASS_NAME+"IOException inside finally due to - "+e.getMessage());
}
}
log.warning("Response in RestClient ---"+result.toString());
//return result.toString();
return new String(result.toString().getBytes(), "UTF-8");
}
Этот код отлично работает в моей локальной системе, но когда я запускаю этот код на сервере, он дает мне ????.
Примечание: при вызове RestClient я добавляю заголовок -
client.AddHeader("Content-Type","application/json; charset=utf-8");
Пожалуйста, подскажите, что мне делать.
Заранее спасибо.