在我的应用程序中,我从名为 Google Search Appliance (GSA) 的外部工具检索 JSON 格式的搜索结果。
GSA 的 JSON 结果非常大,因此我更喜欢将 GSA JSON 结果修改为更适合在我的网页上显示的内容。
如果我直接显示 GSA JSON 结果而不在 Java 代码中对其进行格式化,我的网页上不会遇到任何编码问题。
但是,如果我在 servlet java 代码中将大型 GSA JSON 结果格式化为合适的 JSON 格式,我将面临编码问题。
示例 - “All Access Pass”
显示为 All Access Pass
。
我使用以下代码将修改后的 json 从 servlet 返回到网页 -
response.setContentType("application/json;charset=UTF-8");
我尝试将字符集更改为 iso-8859-1
,但没有任何区别。
我按以下方式编辑原始 JSON -
String responseText = getMethod.getResponseBodyAsString();
JSONObject resultJSON = new JSONObject();
try {
JSONObject jsonObj = new JSONObject(responseText);
JSONArray resultJsonArray = jsonObj
.getJSONArray("RES");
JSONObject searchResultJSON = null;
for (int iCnt = 0; iCnt < resultJsonArray.length(); iCnt++) {
searchResultJSON = new JSONObject();
JSONObject obj = resultJsonArray.getJSONObject(iCnt);
JSONObject metaTagObj = obj
.getJSONObject("MT");
if (metaTagObj.has(("title"))) {
searchResultJSON.put("title",metaTagObj.get("title").toString());
}
resultJSON.accumulate("RES", searchResultJSON);
}
response.setContentType("application/json;charset=UTF-8");
response.getWriter().print(resultJSON);
}catch(JSONException e){}
我在这里对原始 JSON 的修改可以在 JavaScript 中完成,这可以解决我的问题,但这是我不想做的事情。
- 有没有办法找出原始 GSA JSON 中文本的编码格式?
- 如何避免 Java 代码更改原始 GSA JSON 中的文本编码?
请帮助我了解这里发生了什么以及如何避免此问题。
最佳答案
发生文本编码问题是因为使用 Apache HTTP 客户端对 GSA 服务器进行的调用使用的是默认内容编码字符集 iso-8859-1
,但 GSA 服务器期望HTTP 客户端请求和响应采用 UTF-8
编码。
设置 HTTPClient 的编码后,此问题得到解决 -
HttpClient httpClient = new HttpClient();
httpClient.getParams().setContentCharset("UTF-8");
servlet响应编码为
response.setContentType("application/json;charset=UTF-8");
关于java JSON文本编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15515459/