URL-адрес движка приложения UTF-8 становится символом '??'или же '???' - PullRequest
2 голосов
/ 11 декабря 2011

У меня ошибка при загрузке данных из веб-службы в хранилище данных. Проблема заключается в том, что XML, возвращаемый веб-службой, содержит символы UTF-8, и механизм приложений неправильно их интерпретирует. Это делает их как ??.

Я вполне уверен, что отследил это до запроса URL Fetch. Основной поток: Очередь задач -> получить данные веб-службы -> поместить данные в хранилище данных, так что это определенно не имеет ничего общего с кодировкой запроса или ответа основного сайта.

Я разместил сообщения журнала до и после Apache Digester, чтобы выяснить, не в этом ли причина, но решил, что это не так. Вот что я увидел в логах:

строка из XML: "Doppelg nger"

После обработки варочного котла: "Doppelg ?? nger"

Вот мой код извлечения URL:

public static String getUrl(String pageUrl) {
    StringBuilder data = new StringBuilder();
    log.info("Requesting: " + pageUrl);
    for(int i = 0; i < 5; i++) {
        try {
            URL url = new URL(pageUrl);
            URLConnection connection = url.openConnection();
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                data.append(line);
            }
            reader.close();
            break;
        } catch (Exception e) {
            log.warn("Failed to load page: " + pageUrl, e);
        }
    }
    String resp = data.toString();
    if(resp.isEmpty()) {
        return null;
    }
    return resp;

Есть ли способ заставить это распознать ввод как UTF-8. Я протестировал загружаемую страницу, и валидатор W3c распознал ее как действительную utf-8.

Проблема только на серверах приложений, она отлично работает на сервере разработки.

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

1001 * попробовать *

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
0 голосов
/ 11 декабря 2011

Меня втянуло в тот же вопрос 3 месяца назад, Майк.Похоже, и я предполагаю, что ваши проблемы такие же.Позвольте мне вспомнить и положить его здесь.Не стесняйтесь добавлять, если я что-то пропускаю.

Моя установка была Tomcat и стойки.И способ, которым я решил это, был через правильные конфиги в Tomcat.По сути, он должен поддерживать там символ UTF-8.используйте BODEncodingForURI в коннекторе.это для параметров GET

Кроме того, вы можете использовать фильтр для параметров POST.Хороший ресурс, где вы можете найти все это в одной крыше, это Click here !

После этого у меня возникла проблема на производстве, когда у меня был веб-сервер apache, перенаправляющий запрос на tomcat :).Точно так же там нужно включить UTF-8.Мораль истории решает проблему так, как она наступает:)

...