原因分析
- 使用ajax從前台頁面傳輸數據到后台controller控制器的時候,出現中文亂碼
- 其實亂碼問題出現的原因,就是由於默認的tomcat配置,接收請求是以ISO-8859-1來轉碼,導致中文出現了亂碼問題,只要能正確的以utf-8來轉碼,則可以解決亂碼問題。
- 普通數據傳輸,從jsp頁面傳到后台controller,中文亂碼問題解決方案
- 首先檢查jsp頁面編碼格式是否是utf-8
- 設置中文過濾
<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>
- springMvc配置文件中設置JSON數據轉換
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 注解請求映射
默認是ISO-88859-1,避免亂碼這里設置為UTF-8 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8" />
</bean>
<!-- 啟動JSON格式的配置,自動將格式轉換成JSON格式,不需要其他類 -->
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
解決方案
@ResponseBody
@RequestMapping(value="/getJsonDataByCityName",produces="application/json")
public String getJsonByName(HttpServletRequest request,HttpServletResponse response,@RequestParam String city_name)throws ServletException, IOException
{
//response.setContentType("text/html;charset=UTF-8");
//request.setCharacterEncoding("UTF-8");//解決post亂碼問題
System.out.println(request.getCharacterEncoding());
city_name = new String(city_name.getBytes("ISO-8859-1"), "UTF-8");
System.out.println("city_name:"+city_name);
}
- 方式二:
- 配置tomcat目錄下的service.xml文件
- tomcat7/conf/server.xml
- 給該行代碼加上 URIEncoding="UTF-8" 的編碼屬性
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />