java JSON文本编码问题

标签 java json character-encoding google-search-appliance windows-1252

在我的应用程序中,我从名为 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 中完成,这可以解决我的问题,但这是我不想做的事情。

  1. 有没有办法找出原始 GSA JSON 中文本的编码格式?
  2. 如何避免 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/

相关文章:

java - 更改日期类型和格式

java - 如何从上一个停止点下载数据?

c# - 将智能卡连接到 Web 应用程序

iOS,JSON 检查值是否为 false 或字符串

delphi - 如何查找一个单词是否具有标准的 ASCII 字符?

utf-8 - FTP是否支持UTF字符集?

java - JAXB:在类上生成注释列表

javascript - 使用谷歌地图距离矩阵API JSON输出获取距离

python - 如何将这个特定的 json 字符串转换成 python 字典?

ios - 使用 NSString 将 UTF-8 编码转换为 ISO 8859-1 编码