Специальные символы исчезают в запросе POST с телефона Android - PullRequest
5 голосов
/ 09 сентября 2011

У меня есть приложение для Android, которое позволяет вам публиковать свое имя на веб-сайте, хотя я и отправляю запрос HTTP POST на веб-сайт. Проблема в том, что 90% моих клиентов - шведы, и POST-запрос отбрасывает все после специального символа в строке, включая сам специальный символ.

Так шведская фамилия "Börjesson" становится "B".

мой код запроса POST:

public static String execRequest(String url, Map<String, String> params)
{
    try {
        DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
        HttpPost httpPost = null;
        HttpGet httpGet = null;
        if(params == null || params.size() == 0) {
            httpGet = new HttpGet(url);
            httpGet.setHeader("Accept-Encoding", "UTF-8");
        }
        else {
            httpPost = new HttpPost(url);
            httpPost.setHeader("Accept-Encoding", "UTF-8");
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            for(String key: params.keySet()) {
                nameValuePairs.add(new BasicNameValuePair(key, params.get(key)));
            }
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        }
        HttpResponse httpResponse = (HttpResponse)defaultHttpClient.execute(httpPost == null ? httpGet : httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        if(null != httpEntity) {
            InputStream inputStream = httpEntity.getContent();
            Header contentEncoding = httpResponse.getFirstHeader("Content-Encoding");
            if(contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("UTF-8")) {
                inputStream = new GZIPInputStream(inputStream);
            }
            String responseString = convertStreamToString(inputStream);
            inputStream.close();
                return responseString;
        }
    }
    catch(Throwable t) {
        t.printStackTrace();
    }
    return null;
}

Итак, есть ли какие-либо подсказки о том, что я делаю неправильно?

Заранее спасибо!

1 Ответ

7 голосов
/ 19 марта 2012

Использование httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));

...