在开发过程中遇到乱码十分的头痛,如果你在开发过程中也遇到了乱码,本文或许对你有些帮助。
乱码场景:
项目采用Spring框架,视图层使用freemarker,当点击某个链接时redirect到某个Action作些业务逻辑处理,然后再重定向到一个html页面,但是重定向到html页面时,html里面的中文全部变成乱码,在web.xml加过滤器,html、java编码都按UTF-8写还是不起作用,偶尔发现在Action里,加这句话可使页面恢复正常
response.setContentType("text/html;charset=utf-8");
如果每个Action都这样写很是繁琐,修改freemarker配置加入描红的代码
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="requestContextAttribute" value="rc"/>
<property name="prefix" value=""/>
<property name="suffix" value=".html"/>
<property name="cache">
<value>false</value>
</property>
<property name="contentType" value="text/html" />
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="viewClass">
<value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>
</property>
</bean>
在html头文件中加入<meta http-equiv="content-type" content="text/html; charset=UTF-8">然后在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>