适用于Android和Web服务的charset

时间:2013-08-28 14:10:36

标签: android character-encoding

我有一个应用程序可以检索用户的数据,例如名称,并通过Web服务将其发送到远程数据库。 我正面临着特殊口音的问题,比如这个名字'Tağıyeva'

名称在数据库中存储为Ta?ıyeva。

这是我用来发送数据的原因

static String postData(List<NameValuePair> nameValuePairs, String url) {
        InputStream ips = null;
        try {
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
            HttpPost httppost = new HttpPost(MyInternetManager_Class.url+url);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            ips = response.getEntity().getContent();
            String contentAsString = isToString(ips);
            if (MyInternetManager_Class.debug) Log.e("recu",contentAsString);
            if (response.getStatusLine().getStatusCode() != 200 || contentAsString.length() == 0) return "-1"; // erreur serveur
            else return contentAsString;
        }
        catch (IOException e) {
            //...
        } 
        finally {
            try {if (ips != null) ips.close();} catch (IOException e){}
        }
    }

正如你所看到的,我已经让默认的字符集(它是哪一个?)。我的服务器设置为UTF-8。如何解决问题?

更新:现在我收到的JSON看起来像这样 “名字”:“Nh \ u00e1 \ u00ba \ u00adt Pi \ u00e1 \ u00bb \ u00aba \ u00c4 \ u009f \ u00c4 \ u00b1yeva” 我用它来将InputStream转换为String

static String isToString(InputStream stream) {
        Scanner s = new Scanner(stream, "UTF-8").useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";
    }

但字符串未正确显示。 enter image description here代替'NhậtPiừnTağıyeva' 如何解决?

由于

3 个答案:

答案 0 :(得分:1)

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));

我希望这会对你有所帮助。

答案 1 :(得分:1)

根据这些文档,您使用的UrlEncodedFormEntity构造函数默认为ISO-8559-1 charset。您可以(并且看起来应该)将UTF-8作为第二个参数传递:

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs),"UTF-8");

答案 2 :(得分:0)

  

数据格式是JSON,我没有提及(以及Thanatos已经假设的)。使用 Android的JSON解析器会自动正确解码字符。在几个层面上解析JSON本身显然是一个愚蠢的想法。

Check this