有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSON文本编码问题

在我的应用程序中,我从一个名为GoogleSearchAppliance(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中的文本编码

请帮助我了解这里发生了什么,以及如何避免这个问题


共 (1) 个答案

  1. # 1 楼答案

    发生文本编码问题是因为使用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");