Специальные символы между Android и PHP

Мне нужна ваша помощь с этим снова. Я хочу отправить специальные символы из приложения Android в PHP-скрипт и наоборот.

Код Android


... HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.mypage.com/script.php"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("value", "Español")); post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = client.execute(post); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ InputStream inps = response.getEntity().getContent(); InputStreamReader inp = new InputStreamReader(inps, Charset.forName("ISO-8859-2")); BufferedReader rd = new BufferedReader(inp); StringBuilder stringBuilder = new StringBuilder(); String bufferedStrChunk = null; while ((bufferedStrChunk = rd.readLine()) != null) { stringBuilder.append(bufferedStrChunk); } Result = stringBuilder.toString(); }... 

PHP-код


 <?php header("Content-Type: text/plain;charset=ISO-8859-2"); echo $_POST["value"]; ?> 

Первый шаг

Я пытаюсь отправить строку «Español» с Android на PHP. Я сохраняю строку в таблице MySQL (кодировка UNICODE), и я правильно понимаю строку. Я также получаю целочисленные значения каждого указчика. В результате «Español» и «69.115.112.97.241.111.108». Итак, Android отправляет символ «-» как 241, который в диаграмме UNICODE определяется как «ń». См. Http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080.

Второй ход

Я возвращаю строку с PHP на Android и вместо того, чтобы получать «-», я получаю «ń». Здесь я потерялся. Когда это изменяется и почему они имеют одинаковое числовое значение, они отличаются? Это слишком много для меня, и я прошу вашу помощь. Заранее спасибо!

Используйте ISO-8859-2 при создании URLEncodedEntity которое вы отправляете. Вы можете установить это как параметр в конструкторе.

Без указанной кодировки вы, вероятно, отправляете данные в UTF-8 / UTF-16 (наиболее распространенные), которые сервер интерпретирует по-другому.

EDIT : похоже, что ISO-8859-2 не поддерживает. Возможно, вам придется что-то изменить на стороне сервера. http://en.wikipedia.org/wiki/ISO/IEC_8859-2

ОК Итак, это мой последний код, и он работает. Я должен указать свою среду: API 15, Android 4.0.3

КОД JAVA


 ... HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.mypage.com/script.php"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("value", "Español")); post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "ISO-8859-2")); HttpResponse response = client.execute(post); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ InputStream inps = response.getEntity().getContent(); InputStreamReader inp = new InputStreamReader(inps, Charset.forName("UTF-8")); BufferedReader rd = new BufferedReader(inp); StringBuilder stringBuilder = new StringBuilder(); String bufferedStrChunk = null; while ((bufferedStrChunk = rd.readLine()) != null) { stringBuilder.append(bufferedStrChunk); } Result = stringBuilder.toString(); } ... 

PHP-код


 <?php header("Content-Type: text/plain;charset=UTF-8"); echo utf8_encode($_POST["value"]); ?> 

С помощью этого кода я могу отправить эту строку скрипту PHP, сохранить его в базе данных и / или вернуть его в приложение Android (и получить его так же, как я его отправил). Я работал над этим в течение нескольких дней, и я надеюсь, что это Будет использоваться для других разработчиков Android. Кстати, я использую код Java внутри асинхронного класса внутри функции doInBackground ().

Спасибо и до свидания