我有一个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