我需要從Android發送一個字符串到一個PHP Web服務(用戶輸入在EditText中)。 這個運行正常,有標準字符和一些特殊字符(比如重音,ñ和更多),但是當我發送西里爾文或阿拉伯文字符時,Web服務不能識別,然後替換爲其他字符(如±ÐÒ) 。 這是我的Android代碼:安卓到php發送UTF8編碼文本,不工作與西里爾或阿拉伯文字符
// Post the data:
public class Sincronizar extends AsyncTask<JSONObject, JSONObject, JSONObject> {
String resFromServer=null;
private String url = "http://.../send.php"; //The url of the web service
@Override
protected JSONObject doInBackground(JSONObject... data) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
JSONObject jsonResponse = null;
try {
JSONObject jsonPlace = new JSONObject();
jsonPlace.put("pais", ((EditText)findViewById(R.id.etTexto)).getText().toString());
JSONArray postjson=new JSONArray();
postjson.put(jsonPlace);
// Post the data:
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
httppost.setHeader("json",jsonPlace.toString());
httppost.getParams().setParameter("jsonpost",postjson);
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
if (response.getEntity()!=null) {
resFromServer = org.apache.http.util.EntityUtils.toString(response.getEntity());
jsonResponse=new JSONObject(resFromServer);
}
} catch (Exception e) {
Log.e("Sincronizar","doIn:"+resFromServer);
}
return jsonResponse;
}
@Override
protected void onPostExecute(JSONObject jsonResponse) {
try{
if (jsonResponse!=null) {
String pais = jsonResponse.getString("pais");
String respuesta = String.format("PAIS: %s",pais);
Log.e("Sincronizar",""+respuesta);
((TextView)findViewById(R.id.textView1)).setText(respuesta);
}
}catch (Exception e) {
Log.e("Sincronizar","onPostExecute: "+e.getMessage());
}
super.onPostExecute(jsonResponse);
}
}
這是PHP Web服務:
<?php
header('Content-Type: text/html; charset=utf-8');
try {
if (isset($_SERVER['HTTP_JSON'])) {
$json = $_SERVER['HTTP_JSON'];
$cadena = utf8_encode($json);
$data = json_decode($cadena,true);
$json_error= json_last_error();
$pais = $data["pais"];
} else {
$pais="No received";
}
}catch(Exception $e) {
$pais="Exception: ".$e->getMessage();
}
$output=array('pais'=>$pais);
print(utf8_encode(json_encode($output)));
?>
在Web服務中我也嘗試插入接收到MySQL數據庫字符串。正常的和一些特殊的字符如Ñ,á(重音符)等等,都會被插入。但用阿拉伯文或西里爾字符我收到這樣的字符串:「±±'」,「±Ã'À」
我認爲問題是編碼,但我發送和接收UTF8(我認爲) 任何理念? 謝謝!
數據庫中的排序規則是什麼? – idstam 2014-12-19 07:47:40