2016-07-31 100 views
1

我面對編碼從網頁阿拉伯語響應,我使用凌空調用Web服務Android的 - 與編碼阿拉伯語詞彙問題

我試圖解決這個問題問題。

我創建然後自定義請求解析網絡響應與utf-8編碼,當我登錄到檢查結果它給我奇怪的文字在這裏是我的日誌{"data":null,"msg":"لا يوجد تنبيهات","status":false},這裏是我的滿級,我做了一些嘗試,以及根據前面的回答fixEncodingUnicode但所有嘗試失敗。

我感謝所有幫助謝謝

import android.text.Html; 
import android.util.Log; 

import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Response; 
import com.android.volley.toolbox.HttpHeaderParser; 
import com.android.volley.toolbox.JsonObjectRequest; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 
import java.net.URLEncoder; 

/** 
* Created by mina on 7/28/2016. 
*/ 

    public class myJsonObjectRequest extends JsonObjectRequest { 


     public myJsonObjectRequest(int method, String url, String requestBody, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
      super(method, url, requestBody, listener, errorListener); 
     } 

     public myJsonObjectRequest(String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
      super(url, listener, errorListener); 
     } 

     public myJsonObjectRequest(int method, String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
      super(method, url, listener, errorListener); 
     } 

     public myJsonObjectRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
      super(method, url, jsonRequest, listener, errorListener); 
     } 

     public myJsonObjectRequest(String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
      super(url, jsonRequest, listener, errorListener); 
     } 

     @Override 
     protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 

      try { 
       response.headers.put("Content-Type", 
         response.headers.get("content-type")); 
       String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 

       Log.v("network_response", jsonString + "encoding "+ response.headers.get("content-type")); 
       return Response.success(new JSONObject(jsonString), 
         HttpHeaderParser.parseCacheHeaders(response)); 
      } catch (UnsupportedEncodingException e) { 
       return Response.error(new ParseError(e)); 
      } catch (JSONException je) { 
       return Response.error(new ParseError(je)); 
      } 

     } 


     private String DecodemyString(String msg) { 
      try { 
       return URLEncoder.encode(msg, "UTF-8"); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
      return ""; 
     } 

     public static String fixEncodingUnicode(String response) { 
      String str = ""; 
      try { 
       str = new String(response.getBytes("ISO-8859-1"), "UTF-8"); 
      } catch (UnsupportedEncodingException e) { 

       e.printStackTrace(); 
      } 

      String decodedStr = Html.fromHtml(str).toString(); 
      return decodedStr; 
     } 
    } 
+0

使用改型和JsonConverter讓您的生活更輕鬆。 – Amir

+0

感謝回答朋友,但我可以修復編碼問題與當前代碼 –

+0

如果我說實話我沒有與排除工作但你可以解決這個問題,單線代碼在改造。這裏是我通常在我的項目中使用的代碼,並且工作正常: http://stackoverflow.com/a/36963162/1462770 – Amir

回答

0

最後我想很好的解決方案給所有誰面臨編碼問題

第一:確認您的Android工作室編碼UTF-8,

文件 - >設置 - >編輯 - >文件編碼在編碼項目中選擇utf-8

reference

二:這裏的伎倆,我們需要發現沒收到什麼編碼,我們可以稱之爲response.headers.get("content-type")接近規定parseNetworkResponse方法。

在我的情況我得到了字符集:UTF-8的意思是在UTF-8編碼,但實際上它不是,我們如何發現真正的編碼類型在這裏是網站檢測編碼https://2cyr.com/decode/,只是過去的網站文本,編碼:自動檢測

它將返回粘貼的文本與所有編碼向下滾動,找到寫編碼(你會看到在原來的語言你的寫作)

獲取信源編碼:,顯示爲:

我案例我發現源編碼:utf-8 顯示爲:wind OWS-1254

這是爲什麼呢,我創建方法修復編碼問題

public static String fixEncodingUnicode(String response) { 
      String str = ""; 
      try { 
              // displayed as desired encoding 
                ^    ^
                |     | 
       str = new String(response.getBytes("windows-1254"), "UTF-8"); 
      } catch (UnsupportedEncodingException e) { 

       e.printStackTrace(); 
      } 

      String decodedStr = Html.fromHtml(str).toString(); 
      return decodedStr; 
     }