从php发送到android的特殊字符打印错误


Special characters send from php to android are printed wrong

我有一个MySQL数据库,其中我有一个表与列的排序:

utf8_general_ci

在这一列中,我将保存特殊字符,如:

á, é, í, ó, ú, ñ

当我使用PHP得到这一列并在网页中打印它们时,一切看起来都很完美,当我在android应用程序上打印这些字符时,问题来了,它看起来像这样:

ñ

和那些奇怪的字符。

我已经尝试过使用:

mysql_query("set names 'utf8'");

但是我没有运气。我该如何解决这个问题?起初我认为这是一个MySQL的问题,但我可以看到,数据打印正确时,它在一个网页上,所以也许它的android…

我有android的下一个代码:

HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(Utils.IP_ADDRESS + "index.php?module=fetchImage&page=main&ajax=1");
        List<NameValuePair>  nameValuePair = new ArrayList<NameValuePair>(1);
        nameValuePair.add(new BasicNameValuePair("sessionId", prefs.getString("sessionId", null)));
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        HttpResponse response = httpClient.execute(httpPost);
        responseBody = EntityUtils.toString(response.getEntity());
        System.out.println(responseBody); // here i get Otoño and it should be Otoño

这个问题不是在你的MySQL或PHP,因为它的检索和打印特殊字符正确的网页。

似乎问题是在你的android客户端代码。您没有解析响应到正确的字符集(UTF-8)。

如果来自web服务的响应是JSON,它的默认字符集是UTF-8,所以您需要从ws读取响应作为UTF8,例如

BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 8);

如果你提供额外的细节或示例代码,它会更容易解决你的问题

编辑

根据你的编码,修改

responseBody = EntityUtils.toString(response.getEntity());

responseBody = EntityUtils.toString(response.getEntity(), "utf8");

在将响应转换为String时需要提及Charset