Проблемная пружина кодировки символов

Я застреваю в большой проблеме с кодированием в моем веб-сайте! Я использую пружину 3, кот 6, и mysql дб. Я хочу поддерживать немецкий язык и чешский язык наряду с английским языком в моем веб-сайте, я создал весь JSPs как файлы UTF-8, и в каждом jsp я включаю следующее:

<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Я создал messages.properties (значение по умолчанию, которое является чешским), messages_de.properties, и messages_en.properties. И все они сохраняются как файлы UTF-8.

Я добавил следующее к web.xml:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filterclass>
          org.springframework.web.filter.CharacterEncodingFilter</filterclass>
    <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>

 <locale-encoding-mapping-list>
    <locale-encoding-mapping>
        <locale>en</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
    <locale-encoding-mapping>
        <locale>cz</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
    <locale-encoding-mapping>
        <locale>de</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
</locale-encoding-mapping-list>

 <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>  

И добавьте следующее к моему applicationContext.xml:

<bean id="messageSource"    
    class="org.springframework.context.support.ResourceBundleMessageSource"
    p:basenames="messages"/>

<!-- Declare the Interceptor -->
<mvc:interceptors>    
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
          p:paramName="locale" />
</mvc:interceptors>

<!-- Declare the Resolver -->
<bean id="localeResolver"  
       class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

Я установил атрибут useBodyEncodingForURI на истинный в элементе server.xml под: %CATALINA_HOME %/conf, также другое время пыталось добавить URIEncoding = "UTF-8" вместо этого.

Я составил все таблицы и поля с набором символов [utf8] и набор [utf8_general_ci]

Кодирование в моем браузере является UTF-8 (BTW, у меня есть IE8 и Firefox 3.6.3),

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

Так, вот список проблем, которые я имею:

  1. По умолчанию messages.properties (чешский язык) должен загрузиться, вместо этого загрузки messages_en.properties по умолчанию.

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

Я не знаю, где ошибка! Почему не может я получать его работа, хотя я сделал то, что люди сделали и работали на них! не знать..

Помогите мне, я застреваю в этой дрянной проблеме со дней, и она сводит меня с ума!

Заранее спасибо.

13
задан user256872 17 June 2010 в 18:51
поделиться

3 ответа

Во-первых, если ваш проект использует Maven, убедитесь, что Maven Resources Plugin имеет UTF-8 в качестве схемы кодировки символов, иначе файлы свойств сообщений могут быть записаны в вашу цель с неправильной кодировкой.

Во-вторых, вы используете ResourceBundleMessageSource, который использует стандартные java.util.ResourceBundle и java.util.Properties, которые поддерживают только кодировку ISO-8859-1. Вместо этого вы можете использовать ReloadableResourceBundleMessageSource, например:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
         <property name="basename" value="classpath:messages"/>
         <property name="defaultEncoding" value="UTF-8"/>
</bean>

который я обнаружил из этой статьи блога Cake Solutions.

15
ответ дан 1 December 2019 в 22:56
поделиться

1: По умолчанию должен загружаться messages.properties (чешский), вместо этого по умолчанию загружается messages_en.properties.

Я не занимаюсь Spring, так что вот вам выстрел в темноту: может быть, потому что английский язык заказан первым и/или ваша платформа/браузер использует английский язык в качестве локали по умолчанию? Перестройте конфигурацию и проверьте accept-language в заголовке HTTP запроса, чтобы исключить одно и другое.

2: В веб-форме, когда я ввожу чешские данные, затем нажимаю submit, в контроллере я распечатываю данные в консоли перед тем, как сохранить их в db, то, что печатается, не является правильным, имея странные символы, и это именно те данные, которые сохраняются в db.

Настроена ли консоль на использование UTF-8 для отображения данных? В противном случае она будет использовать кодировку платформы по умолчанию. В Eclipse, например, вы можете настроить ее с помощью Window > Preferences > General > Workspace > Text File Encoding.

Настроен ли уровень доступа к данным должным образом для обработки данных в формате UTF-8? Известно, что драйвер MySQL JDBC немного не умен в этом. Он будет использовать не кодировку, указанную в БД, а кодировку по умолчанию клиентской платформы. Для этого в строке подключения JDBC нужно использовать свойства useUnicode=true и characterEncoding=UTF-8. Например,

jdbc:mysql://localhost/some_db?useUnicode=yes&characterEncoding=UTF-8
2
ответ дан 1 December 2019 в 22:56
поделиться

Если это все еще не работает, и вы используете Tomcat в качестве сервера приложений, попробуйте установить следующий параметр для каждого элемента в server.xml:

<Connector URIEncoding="UTF-8" ...>
    ...
</Connector>

Это помогло мне. Для других серверов приложений могут существовать аналогичные опции, поэтому вам стоит проверить документацию по серверу.

3
ответ дан 1 December 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: