Опубликованные данные 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 nameValuePairs = new ArrayList(); 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?

После долгих исследований и попыток заставить все работать, я наконец нашел решение проблемы, это простое дополнение к существующему коду. Решение заключалось в использовании параметра «UTF-8» в конструкторе classа 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 —————–

    
-------------test2.jspx----------------- The test entered is request.getParameter("u") ----------------------------------

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

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

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

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

  • Как добавить символ маркера в TextView?
  • Преобразование символов, акцентированных букв на английский алфавит
  • Как написать символ и в файле android strings.xml
  • как блокировать или ограничивать специальные символы из полей ввода с помощью jquery?
  • Является ли двоеточие `:` безопасным для использования дружественного URL-адреса?
  • Давайте будем гением компьютера.