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");