Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 從Android使用JSON傳遞參數到後台中文編碼問題

從Android使用JSON傳遞參數到後台中文編碼問題

編輯:關於Android編程

可以在我的新頁面看到這篇文章


因為論文中的算法要應用在Android App中,所以不可避免的會牽扯到與後台服務器之間的交互,其中比較容易出現的問題就是大家早已熟悉的中文亂碼問題雖然已經考慮到會出現這方面的問題,在代碼裡面已經提前考慮Encoding的問題,但還是經歷了一些小曲折。

起始客戶端的代碼如下:

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    JSONObject obj = new JSONObject();
    obj.put("addr",XXX);
    obj.put("city", XXX);
    post.setEntity(new StringEntity(nameValuePairs.toString());
    StringEntity se = new StringEntity(obj.toString(),"UTF-8");
    se.setContentEncoding("UTF-8");
    se.setContentType("application/json");
    post.setEntity(se);
    HttpResponse response = client.execute(post);

以為在new StringEntity的時候加上了一個charset設置會避免出現問題,但是提交到server以後還是出現了亂碼問題。中文全是問號,用Eclipse看了HttpRequest裡面的Content的Encoding設定還是null。
於是Google了一圈後回來用了另一種封裝JSON的方式:

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    JSONObject obj = new JSONObject();
    obj.put("addr",XXX);
    obj.put("city", XXX);
    NameValuePair nameValuePair = new BasicNameValuePair("json",
                obj.toString());
    List nameValuePairs = new ArrayList();
    nameValuePairs.add(nameValuePair);
    UrlEncodedFormEntity encodedHE = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);
    post.setEntity(encodedHE);
    HttpResponse response = client.execute(post);

沒錯,用了UrlEncodedFormEntity來直接生成一個本身就帶有CharsetEncoding的對象,再用POST傳到後台,不過問題依然存在,依然是問號,HttpRequest裡面的Content的Encoding設定仍然還是null。

這時候猜想可能問題不是在這裡,於是突然想到HttpClient也有可以設定CharsetEncoding的方法,於是又查閱了一圈資料發現了解決問題的方法:

    HttpPost post = new HttpPost(url);
    post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

就是這樣,使用setHeader方法重新寫一個HttpHeader把Charset寫進去就可以了。
哎,這麼個小問題還是叫人弄了好久。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved