Android для php отправляет UTF8 кодировать текст, не работает с кириллицей или арабскими символами

Мне нужно отправить строку из Android в php веб-сервис (пользовательский ввод в 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)));
?>

В веб-сервисе я также пытаюсь вставить полученную строку в базу данных Mysql. Нормальные и некоторые специальные символы, такие как С, Б (акценты) и т. Д., Принимаются и вставляются в порядке. Но с арабскими или кириллическими символами я получаю такие строки: «±», «±»

Я думаю, что проблема в кодировке, но я отправляю и получаю UTF8 (я думаю)
Любая идея?
Спасибо!

3

Решение

Перед запуском Sql на сервере в php запустить

$mysqli->set_charset("utf8")

(или эквивалент, я использовал mysqli)
Это решило мою проблему

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

Вы можете написать оператор выбора и получить строки в utf8

надеюсь, это поможет

1

Другие решения

попробуйте эту функцию, это может помочь вам

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;
}
0