Intereting Posts
Подключение к репозиториям GitLab на Android Studio PopBackStack, но сохраните первый фрагмент в android Android Get Country Emoji Flag Использование языка Приложение загружается с белым экраном в течение 3 секунд, прежде чем показывать правильный пользовательский интерфейс – используя фрагменты (без веб-просмотра) Мне нужно загрузить несколько изображений в каталог, чтобы содержимое можно было получить в автономном режиме Обнаружение исходящего звонка на Android Что такое использование общих настроек в Android? Как автоматически увеличить автоматически текущее местоположение в карте Google api для Android? Учебник getRotationMatrix и getOrientation Пользовательские кнопки в Android: как получить границу / край / фрейм, когда я читаю фон из xml? GetQuantityString возвращает неверную строку с 0 значением Динамически добавлять фрагмент в фрагмент Как исключить мою собственную активность из Activity.startActivity (Intent)? Перекомпоновка макета для воспроизведения видео в полноэкранном режиме, когда экран повернут Загрузка / кеширование Карт Google для автономного использования

Посылать кодированные данные UTF-8 на сервер теряет определенные символы

Я работаю над проектом, который включает в себя связь сервера (приложение JavaEE) и клиента (приложение для Android). XML отправляется как один из параметров POST HTTP-запроса (с именем «xml»). Также есть несколько других параметров POST, которые я передаю серверу, но в функции ниже я удалил их для простоты. Возникающая проблема заключается в том, что некоторые буквы неправильно доставляются на сервер – например, символ Ű (обратите внимание, что это не немецкий Ü , который, кстати, доставлен надлежащим образом). Код для отправки:

 private String postSyncXML(String XML) { String url = "http://10.0.2.2:8080/DebugServlet/DebugServlet"; HttpClient httpclient = new DefaultHttpClient(); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("xml",XML)); UrlEncodedFormEntity form; try { form = new UrlEncodedFormEntity(nameValuePairs); form.setContentEncoding(HTTP.UTF_8); HttpPost httppost = new HttpPost(url); httppost.setEntity(form); HttpResponse response = (HttpResponse) httpclient .execute(httppost); HttpEntity resEntity = response.getEntity(); String resp = EntityUtils.toString(resEntity); Log.i(TAG,"postSyncXML srv response:"+resp); return resp; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } 

Я предполагаю, что проблема в BasicNameValuePair, которую я использую, чтобы установить XML как один из параметров POST, и в документации говорится, что он использует набор символов US-ASCII. Каков правильный способ отправки полей POST с кодировкой UTF-8?

Solutions Collecting From Web of "Посылать кодированные данные UTF-8 на сервер теряет определенные символы"

После долгих исследований и попыток заставить все работать, я наконец нашел решение проблемы, это простое дополнение к существующему коду. Решение заключалось в использовании параметра «UTF-8» в конструкторе класса UrlEncodedFormEntity:

 form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8"); 

После этого изменения символы были закодированы и правильно доставлены на сервер.

Когда вы делаете эту строку

 form = new UrlEncodedFormEntity(nameValuePairs); 

Вам нужно указать такую ​​кодировку

 form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8"); 

Вы можете пойти в Android Developer.

Создает новый UrlEncodedFormEntity со списком параметров с кодировкой по умолчанию DEFAULT_CONTENT_CHARSET

 String finalString = URLEncoder.encode(request, "UTF-8"); return finalString; 

User finalString в методе post.

Или я могу добавить ниже код в scriptlet в верхней части моего test2.jspx, который решит проблему

 String en = request.getCharacterEncoding(); if(en == null) { request.setCharacterEncoding("UTF-8"); } 

Я также столкнулся с подобной проблемой. Но, чтобы проверить это, я написал ниже два JSP

————- test1.jspx —————–

 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html; charset=utf-8"/> <body> <form action="/test2.jspx" method="POST" accept-charset="UTF-8"> <input type="text" name="u" id="u" /> <input type="submit" value="Login3" /> </form> </body> </html> -------------test2.jspx----------------- <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html; charset=utf-8"/> <body> The test entered is <jsp:expression>request.getParameter("u")</jsp:expression> </body> </html> ---------------------------------- 

И затем введите ниже акцентированных символов в первом поле ввода.

И ясно видно, что браузер Android не может обрабатывать кодировку UTF-8 в параметрах POST.

Я думаю, мне нужно будет использовать метод GET и вам нужно будет добавить «URIEncoding = UTF-8» для коннектора в tomcat server.xml.

Это была проблема отправки данных UTF-8 с Android. Ваш код будет работать отлично, за исключением того, что вам нужно будет закодировать String на Base64 . На сервере PHP вы просто декодируете Base64 String. Это сработало для меня. Я могу поделиться, если вам нужен код.