Широкоформатная кодировка UTF-8

1

Когда я пытаюсь добавить предложение в администратор Broadleaf, знаки евро (€) в имени или описании преобразуются в ⬠после сохранения.

Странная вещь в том, что это поведение не возникает при сохранении кода для этого предложения. Например:

  • Я создаю промо под названием "€ 5 promo"
  • После сохранения я получу: â¬5 promo (плохо)
  • Я добавляю код к этому промо под названием "Код 5 евро"
  • После сохранения он будет выглядеть следующим образом: €5 code (хорошо)

Я считаю, что это имеет какое-то отношение к экономии, потому что когда я изменяю поле в базе данных, оно отображается правильно. Когда я пытаюсь отредактировать его и сохранить странные символы, возьмите снова...

ИЗМЕНИТЬ 1

JerryOz был очень близок к решению. Единственное, что мне нужно было добавить (рядом с его решением), - это код ниже моего web.xml:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Теги:
encoding
broadleaf-commerce

1 ответ

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

Проблема в том, что приложение неправильно кодирует, когда оно идет в базу данных. Если вы используете Tomcat, добавьте connectionPropeties в свои ресурсы в context.xml. Это будет кодировать UTF-8 и разрешить сохранение специальных символов в БД. Здесь образец:

<Resource name="jdbc/web" auth="Container" type="javax.sql.DataSource"
           maxActive="30" maxIdle="60" maxWait="10000"
           username="username" password="password" driverClassName="com.mysql.jdbc.Driver"
           connectionProperties="useUnicode=true;characterEncoding=utf8;"
           url="jdbc:mysql://localhost/broadleaf"/>

Вы также захотите настроить свои соединители с URIEncoding="UTF-8" в server.xml чтобы убедиться, что параметры запроса GET правильно закодированы. Это позволит фильтровать имена со специальными символами в админе. Здесь образец:

<Connector port="8080" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443" 
          URIEncoding="UTF-8"/>

Это связано с этим замечательным ответом ниже, который охватывает UTF-8 в java webapps:

Как заставить UTF-8 работать в Java Webapps?

Надеюсь это поможет!

  • 0
    Спасибо за быстрый ответ, но это не похоже на работу. Все то же поведение. Обратите внимание, что это не везде, есть другие поля со знаками евро, которые правильно хранятся в базе данных.
  • 0
    Это в сочетании с дополнительным (похожим) кодом в моем web.xml помогло. Спасибо!

Ещё вопросы

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