Spring Integration http исходящий-шлюз и UTF-8

1

Я пытаюсь использовать Spring Integration для загрузки многоязычного XML файла из Интернета. К сожалению, похоже, что Spring Integration рассматривает его как некоторую другую форму кодирования. Здесь соответствующая часть моей конфигурации:

<int-http:outbound-gateway id="example"
    request-channel="requests"
    url="http://localhost/test.xml"
    http-method="GET"
    expected-response-type="java.lang.String"
    charset="UTF-8"
    reply-timeout="1234"
    reply-channel="replies"/>

Текст, который я извлекаю, обрабатывается как ISO-8859-1. Причина, по которой я верю в это, состоит в том, что, если я перекодирую и затем декодирую, я получаю правильный текст. Что-то вроде этого:

public void handleReply(String rawXML) {
    String forRealzies = "";
    try {
        String hack1 = URLEncoder.encode(rawXML, "ISO-8859-1");
        forRealzies = URLDecoder.decode(hack1, "UTF-8");
    } catch(UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }
    // forRealzies now has the properly encoded String
}

Я действительно надеюсь, что я ошибаюсь в конфигурации XML. Какие-либо предложения?

  • 0
    Атрибут charset используется только при преобразовании исходящей полезной нагрузки String в байты (и для настройки заголовка исходящего content-type . Правильно ли content-type заголовок content-type в ответе?
  • 0
    Привет Гэри, я вижу text / xml в качестве типа контента. (А в моей среде разработки это просто xml-файл, находящийся в моем проекте eclipse.) Я также должен отметить, что когда я читаю файл из файловой системы, он анализируется правильно.
Теги:
spring-integration
utf-8

1 ответ

2
Лучший ответ

Вы должны установить charset для content-type; см. здесь.

  • 0
    Привет Гэри, если бы у меня была возможность, я бы установил кодировку. Однако есть ряд сайтов, которые просто не предоставляют кодировку. (Из документа, на который вы ссылались: «Но в других кодировках слишком много немеченых документов, поэтому браузеры используют предпочтительную кодировку читателя, когда нет явного параметра charset.») Есть ли способ переопределить это значение, если оно не установлено? (Другими словами, могу ли я указать предпочтительную кодировку в Spring Integration?)
  • 1
    Я думаю (я не проверял), что конвертер сообщений по умолчанию будет использовать кодировку платформы по умолчанию, если он не относится к content-type . Вы можете настроить пользовательский конвертер сообщений или установить expected-response-type byte[] а затем использовать <object-to-string-transformer /> с выбранной кодировкой.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню