之前做项目的时候一直是Android向PHP后台传英文或者数字,今天第一次传了一个中文参数过去,结果出现了乱码。在一段时间的分析之后,问题出在PHP后台页面的编码问题。我Android的发送数据的时候采用了UTF-8的编码格式,而PHP页面默认的编码格式并非UTF-8,修改之后即可正常运行。
Android端的代码如下
public static String busInfoQuery(String station, String bus_lane) {
String connectURL = "http://10.0.0.12/smartBus/back/user_queryBusInfo.php";
String result;
HttpPost httpPostRequest = new HttpPost(connectURL);
//httpPostRequest.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("station",station));
params.add(new BasicNameValuePair("bus_lane",bus_lane));
try {
httpPostRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpResponse httpResponse = new DefaultHttpClient().execute(httpPostRequest);
if(httpResponse.getStatusLine().getStatusCode()==200){
result = EntityUtils.toString(httpResponse.getEntity());
Log.i("json", result);
return result;
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
PHP后台程序需要加上如下的代码
header("Content-type: text/html; charset=utf-8");
mysql_query("set names 'utf8'");
其中第一行代码时制定该页面的编码格式为utf-8,第二行是为了使utf-8格式的中文字符在访问mysql数据时正常使用。mysql数据表的编码格式也是utf-8