Мне нужно использовать ö,ä.ü в моей программе, но java/android не позволяет

Мне нужна моя программа для отправки запроса на сервер. Проблема в том, что сервер распознает только ös, äs и üs, но JAVA и/или Android их не знают. `Как я могу отправить запрос со строкой вроде "Hermann-Löns" без "изменения" JAVA/Android ö.... Да, кстати, "oe" тоже не распознается сервером, уже пробовал. ..

Спасибо за помощь!

@BalausC:

Я изменил ваш код на:

Я не уверен, что это то, как вы ссылаетесь на правильные поля...

String url = "http://busspur02.aseag.de/bs.exe?SID=473A2&ScreenX=1440&ScreenY=900&CMD=CR&DatumT=30&DatumM=4&DatumJ=2010&AbfAnk=Abf&ZeitH=10&ZeitM=45&Intervall=60&Loeschen=%28N%29eue+Suche";
        String charset = "CP1252";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("HTO", start_from));
        params.add(new BasicNameValuePair("HT1", destination));
        UrlEncodedFormEntity query = new UrlEncodedFormEntity(params, charset);

            HttpPost post = new HttpPost(url);
            post.setEntity(query);
            InputStream response = new DefaultHttpClient().execute(post).getContent();
            // Now do your thing with the facebook response.

Я не могу скомпилировать, потому что я получаю сообщение об ошибке:

Метод getContent() не определен для типа HttpResponse.

Если я удалю getContent(), он говорит:

Type mismatch: cannot convert from HttpResponse to InputStream

И еще: я использую htmlparser (http://htmlparser.sourceforge.net/) для анализа полученного Веб-сайт. Как мне получить доступ к полученному html-сайту для его анализа? Потому что иначе мне пришлось бы переписать почти весь мой код, чтобы получить результаты.


person MJB    schedule 29.04.2010    source источник
comment
На что Java/Android меняет ö? Это может быть просто проблема с кодировкой.   -  person Kathy Van Stone    schedule 29.04.2010
comment
Спасибо за вашу помощь. см. мой комментарий к ответу BalusC для получения дополнительной информации.   -  person MJB    schedule 29.04.2010


Ответы (1)


Кстати, вам нужно использовать java.net.URLEncoder с соответствующей кодировкой символов для кодирования специальных символов в параметрах запроса.

String param = URLEncoder.encode("Hermann-Löns", "CP1252");

Убедитесь, что вы указали заголовок Accept-Charset: CP1252 в HTTP-запросе. Для более полного примера кода, как запустить HTTP-запрос с правильной кодировкой, проверьте этот ответ, который я опубликовал час назад. Он также охватывает пример HttpClient, который также включен в Android.

person BalusC    schedule 29.04.2010
comment
Спасибо за ваш ответ. Я попробовал это, и это работает, ну, это ДОЛЖНО работать, но вот проблема: я просто вставляю пользовательский ввод в URL-адрес, который получит сервер, если я сделаю обычный запрос в веб-браузере. после этого я анализирую страницу, которая будет отображаться. Я видел, что сервер использует эту кодировку в UTF-8, но только ПОСЛЕ того, как он получил ввод. это означает, что он получает мои строки в кодировке UTF-8 в качестве входных данных, а не в качестве прямого вызова. Например: Test Haus становится Test%2BHouse ДО того, как сервер даже получит входные данные для его использования. затем он делает ту же кодировку и пытается ее использовать... - person MJB; 29.04.2010
comment
Серверу необходимо URLDecode это. Достойные веб-серверы/сервлетконтейнеры Java должны делать это автоматически (по крайней мере, если вы указали правильный Content-Type в заголовке запроса, однако я не уверен, делает ли это HttpClient). О каком сервере вы говорите? Это под вашим полным контролем? - person BalusC; 29.04.2010
comment
К сожалению, у меня нет никакого контроля над сервером. Я использую busspur02.aseag.de/ .... Я просто вставляю пользовательский ввод в URL справа место... - person MJB; 29.04.2010
comment
Этот сайт использует кодировку Windows 1252 (ANSI)... Я бы заменил "UTF-8" на "CP1252" в коде. - person BalusC; 30.04.2010
comment
Убедитесь, что вы указали заголовок Accept-Charset: UTF-8 в HTTP-запросе. Что ты имеешь в виду? - person MJB; 30.04.2010
comment
Смотрите ссылку за проверить этот ответ. - person BalusC; 30.04.2010
comment
Вы должны были отредактировать свой вопрос, чтобы включить обновление :) Я писал код с самого начала, и оказалось, что я забыл getEntity() между ними :) Ради вас, вы также можете просто проверить документы API, учебные пособия и примеры на сайте HttpClient;) - person BalusC; 30.04.2010
comment
ок, извините, я отредактировал свой первый пост. Я думал, что другим людям, которые читают это, будет легче следить за моими изменениями....... Теперь мне просто нужно выяснить, что делать с переменной ответа.. :) Я просто хочу получить html-страницу, которую я хотел бы Получил, если бы я ввел параметры в браузере... - person MJB; 30.04.2010
comment
Это в InputStream. Большинство парсеров HTML могут просто принять InputStream в качестве аргумента метода, например. parse(stream). Обратитесь к их документации. Если застрял, лучше задайте новый вопрос, это совсем другая тема. - person BalusC; 30.04.2010
comment
Хорошо, спасибо, пока. Я вижу, что я могу сделать, и очень ценю ваши усилия! - person MJB; 30.04.2010
comment
ОК, я получил поток в строку. Однако он просто взял страницу как есть, ничего не помещая на страницу и отправляя фактический запрос :/ - person MJB; 30.04.2010
comment
Вероятно, отсутствуют дополнительные параметры запроса. Сама кнопка отправки может быть? Установите отладчик заголовков HTTP (Firebug? Fiddler?), отправьте настоящую форму и отследите, какие именно параметры действительно были отправлены, а затем подставьте их в свой код Java. Также в некоторых случаях определяющим может быть заголовок запроса User-Agent; попробуйте установить обычную строку пользовательского агента веб-браузера, например. один из Firefox. Ведь на ваш первоначальный вопрос давно дан ответ. Это другая проблема. Если вы все еще застряли, задайте новый вопрос. - person BalusC; 30.04.2010