1

在我的应用程序检索称为谷歌搜索设备(GSA)的外部工具JSON格式的搜索结果。来自GSAJava的JSON文本编码问题

JSON结果是非常大的,因此,我希望修改GSA JSON结果为更适合显示在我的网页。

如果我没有直接在我的Java代码格式化我不会在我的网页遇到任何编码问题显示GSA JSON结果。

但是,如果我大GSA JSON结果格式化为我所面对的问题编码在我的servlet的Java代码合适的JSON格式。示例 - “All Access Pass”显示为ÂAll Access PassÂ

我从我的servlet返回修改后的JSON的网页使用下面的代码 -

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){} 

修改到我要在这里可以用JavaScript来完成这将解决我的问题,原来的JSON但它是我做的不想做。

  1. 有没有办法找出原GSA JSON文本的编码格式?
  2. 我怎样才能避免在原有GSA JSON更改文本编码的java代码?

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

+0

我很好奇原来的JSON格式如何相同的字符。什么是您转换它的“合适的JSON格式”?你如何转换它? – jahroy 2013-03-20 06:18:28

+0

我的代码唯一的区别是,当我显示原始JSON时,我将响应内容类型设置为(“application/json”)。但是如果我用修改过的JSON做同样的事情,我会变得“??”字符,所以我将它设置为“application/json; charset = UTF-8”。 – 2013-03-20 06:34:54

+0

这些引号通常来自微软的应用程序...所以我google了一下,发现[this](http://forum.springsource.org/showthread.php?72944-How-to-handle-Smart-Quotes-pasted- into-TextArea-input),这让我想知道你是否需要阅读“_Microsoft的Windows-1252字符编码_”。或者,也许我的路要走...... – jahroy 2013-03-20 06:41:34

回答

2

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