Я застреваю в большой проблеме с кодированием в моем веб-сайте! Я использую пружину 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 и вставляю вручную чешские или немецкие данные, он вставляется правильно и отображается правильно в моем приложении также.
Так, вот список проблем, которые я имею:
По умолчанию messages.properties (чешский язык) должен загрузиться, вместо этого загрузки messages_en.properties по умолчанию.
В веб-форме, когда я ввожу чешские данные, затем нажимают, отправляют, в Контроллере, я распечатываю данные в консоли прежде для сохранения его к дб, что печатается, не корректные имеющие странные символы, и это - точные данные, которые сохраняют к дб.
Я не знаю, где ошибка! Почему не может я получать его работа, хотя я сделал то, что люди сделали и работали на них! не знать..
Помогите мне, я застреваю в этой дрянной проблеме со дней, и она сводит меня с ума!
Заранее спасибо.
Во-первых, если ваш проект использует 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.
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
Если это все еще не работает, и вы используете Tomcat в качестве сервера приложений, попробуйте установить следующий параметр для каждого элемента
в server.xml
:
<Connector URIEncoding="UTF-8" ...>
...
</Connector>
Это помогло мне. Для других серверов приложений могут существовать аналогичные опции, поэтому вам стоит проверить документацию по серверу.