Я почесал голову над проблемой кодирования веб-приложением Tomcat, созданным с помощью Spring MVC 3.1.1.Замена символа символа символа freelarker Spring MVC
Проблема
значение формы поля ввода связаны пружиной с помощью Freemarker Spring макро получает декодируется как ISO-8859-1 вместо UTF-8.
Текущая конфигурация
Я настроил FreeMarker кодировать все в UTF-8.
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/templates/" />
<property name="freemarkerSettings">
<props>
<prop key="auto_import">spring.ftl as spring</prop>
<prop key="url_escaping_charset">UTF-8</prop>
</props>
</property>
</bean>
Вот мой фильтр кодировки символов в файле web.xml.
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
HTML головка разметки тег содержит:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
UTF-8 кодирование работает отлично подходит для отображения данных, которая приходит обратно в моих взглядах Freemarker, за исключением данных, которые связаны с образованием значения, такие как вход ниже.
<form id="main-search-form" action="search" method="GET">
<@spring.formInput 'searchForm.q' 'id="q" maxlength="2048" autocomplete="off" spellcheck="false"'/>
</form>
Насколько я могу судить, и после выполнения часов чтения в Интернете, похоже, Spring по умолчанию в ISO-8859-1, в большинстве случаев, но я не нашел ни гроша, чтобы переопределить изменения тип декодирования для связанных данных. Даже когда HTTP-запрос закодирован в UTF-8, а узел Connector контейнера tomcat установлен с URIEncode = «UTF-8», Spring пытается декодировать с помощью ISO-8859-1.
Любая помощь будет оценена по достоинству.