Установите кодировку символов запроса для входных значений JSF в UTF-8.

У меня та же проблема, что и Установить кодировку символов запроса для входных значений JSF в UTF-8 в GlassFish отправленные значения поступают как Mojibake. Однако ответ нацелен на GlassFish, и я использую JBoss AS 7.

Я уже указал URL-адрес подключения JDBC для использования UTF-8:

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

И в верхней части моей страницы JSF:

<?xml version='1.0' encoding='UTF-8' ?>

Как решить ту же проблему в JBoss AS 7? Или лучше более общим способом, чтобы он работал на всех серверах?


person Lost Heaven 0809    schedule 13.07.2013    source источник
comment
Невозможно понять, в чем ваша проблема. Пожалуйста, отредактируйте свой вопрос, чтобы уточнить проблему, с которой вы столкнулись.   -  person skuntsel    schedule 13.07.2013
comment
Моя проблема такая же, как эта ссылка [stackoverflow.com/ вопросы/9682476/. Я использую Jboss 7 AS вместо Glassfish. Хочу спросить как исправить проблему в Jboss.   -  person Lost Heaven 0809    schedule 13.07.2013


Ответы (3)


Вопрос, на который вы ссылались, уже исключил кодировку БД из-за того, что проблема уже возникает во время печати/повторного отображения отправленного значения перед сохранением в БД. Таким образом, проблема заключается в кодировке HTTP-запроса.

URL-адрес вашего соединения JDBC с указанной кодировкой,

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

только сообщает драйверу MySQL JDBC использовать UTF-8 для декодирования значений в запросах SQL перед отправкой в ​​​​БД. Это не только полностью выходит за рамки JSF, но и не является причиной вашей проблемы, при условии, что вы абсолютно уверены, что у вас та же проблема, что и в связанном вопросе.

Ваш пролог XML с указанной кодировкой,

<?xml version='1.0' encoding='UTF-8' ?>

только сообщает синтаксическому анализатору XML использовать UTF-8 для декодирования источника XML перед построением дерева XML вокруг него. Фактически используемый синтаксический анализатор XML — это SAX, используемый внутри Facelets во время сборки представления JSF. Эта часть не имеет никакого отношения к кодированию HTTP-запроса/ответа и, таким образом, маловероятно, что она является причиной вашей проблемы.

Ни один из них не устанавливает кодировку HTTP-запроса, а вам нужно установить кодировку HTTP-запроса. Вопрос, на который вы ссылались, уже показывает, как это сделать для сервера Glassfish. Однако в вашем случае вы используете сервер JBoss AS. В этом случае настройка, специфичная для Glassfish, неприменима, и JBoss ничего подобного не поддерживает. Вам нужно будет ввести собственный фильтр сервлета, чтобы выполнить эту работу. Например.

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    // ...
}
person BalusC    schedule 14.07.2013
comment
Когда я пытаюсь использовать: jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 в моем application-context.xml, это дает мне ошибку. Ссылка на объект characterEncoding должна заканчиваться символом '; ' разделитель, не могли бы вы помочь мне с проблемой - person NKS; 10.01.2014
comment
Невероятный. Вот мы и в 2014 году, используем последнюю версию ОС, JEE, сервер приложений, базу данных — все в кодировке UTF-8. И все же нам нужен обходной путь, чтобы специальные символы обрабатывались правильно. Спасибо за это решение! - person Torsten Römer; 31.05.2014

В standalone.xml добавьте атрибут url-charset="UTF-8" в тег http-listener name="default" и добавьте атрибут default-encoding="UTF-8" в тег servlet-container.

person Juliano José da Silva    schedule 21.05.2019
comment
Ни один из предыдущих ответов не работал для меня. Затем я опубликовал то, что мне помогло. - person Juliano José da Silva; 22.05.2019

Добавление этого к JBOSS_HOME/standalone/configuration/standalone.xml решило это для меня:

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

Получено с сайта https://developer.jboss.org/message/643825#643825.

person Christof Kälin    schedule 14.11.2014