Android到php发送UTF8编码文本,不使用西里尔字母或阿拉伯字符

时间:2014-12-19 07:31:54

标签: php android json utf-8 cyrillic

我需要从Android发送一个String到一个php web服务(EditText中的用户输入)。 这个运行正常,有标准字符和一些特殊字符(如口音,ñ等),但是当我发送西里尔字母或阿拉伯语字符时,网络服务无法识别,并替换为其他字符(如±ÐÒ)。 这是我的Android代码:

// 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网络服务:

<?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服务中,我也尝试将收到的String插入到Mysql DB中。正常和一些特殊的字符,如Ñ,á(重音符号)等,都可以插入OK。但是对于阿拉伯语或西里尔字母,我收到了这种字符串:“±±”,“±Ã”“

我认为问题是编码,但我发送和接收UTF8(我认为) 任何的想法? 谢谢!

2 个答案:

答案 0 :(得分:1)

在php运行的服务器上进行Sql opeatrion之前

$mysqli->set_charset("utf8")

(或等效,我使用mysqli) 这解决了我的问题

mysqli_set_charset($con,'utf8');
mysqli_query($con, "insert into table (name, lastname) values ('Ñishá', 'Akopov')");

您可以在utf8中编写select语句并检索行

希望这会有所帮助

答案 1 :(得分:0)

尝试此功能可能会对您有所帮助

function parseUtf8ToIso88591($string){
     if(!is_null($string)){
            $iso88591_1 = utf8_decode($string);
            $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $string);
            $string = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');  
            return "";
     }
     return $string;
}