解決springMVC中文亂碼問題(jsp頁面編碼爲utf-8)
1. 表單提交controller得到中文參數後亂碼解決方案
Form表單提交方式必須爲post ,get方式spring過濾器不起做用html
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> java
<form action="${ctx}/user/addUser" name="userForm" method="post"> mysql
解決方案:修改web.xml,增長編碼過濾器web
|
在配置鏈接數據庫的參數設置修改:spring
- <property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8"></property>
第一種狀況:sql
jsp頁面中文輸入,到controller亂碼,這時候須要設置的是在web.xml文件中添加一個編碼的過濾器(filter)將編碼統一爲UTF-8,數據庫
解決:web.xml配置文件json
<filter>服務器
02.<filter-name>CharacterEncodingFilter</filter-name>app
03.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
04.<init-param>
05.<param-name>encoding</param-name>
06.<param-value>utf-8</param-value>
07.</init-param>
08.</filter>
09.<filter-mapping>
10.<filter-name>CharacterEncodingFilter</filter-name>
11.<url-pattern>/*</url-pattern>
12.</filter-mapping>
注意:最好把這段代碼放在web.xml中開頭的位置,由於攔截有順序,若是放在後面的話容易攔截不到。
第二種狀況:
數據庫中文數據,jsp頁面顯示亂碼(不是嚴格意義上的亂碼,而是以問號的形式呈現)
解決:因爲咱們先後臺的數據交互使用的是json數據,只須要在轉json的時候設置一下編碼格式就能夠了
response.setContentType("application/json;charset=UTF-8");//防止數據傳遞亂碼
第三種狀況:頁面中文,傳遞到controller也是正確的,可是保存到數據庫以後就是亂碼(也不是嚴格意義的亂碼,跟上面同樣全是問號)
解決:鏈接數據庫時加上格式
<datasource jta="true" jndi-name="java:jboss/datasources/JcMysqlDS" pool-name="JcMysqlDS" enabled="true" use-java-context="true">
02.<connection-url>jdbc:mysql://192.168.24.46/ITOO_BASIC_BASIC?useUnicode=true&characterEncoding=UTF-8</connection-url>
03.<driver>mysql</driver>
04.<pool>
05.<prefill>false</prefill>
06.<use-strict-min>false</use-strict-min>
07.<flush-strategy>FailingConnectionOnly</flush-strategy>
08.</pool>
09.<security>
10.<user-name>root</user-name>
11.<pass<a href="http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>123456</pass<a href="http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>
12.</security>
13.</datasource>
2. Java亂碼問題:
1.頁面亂碼
在相應的jsp頁面或者html頁面設置相關的字符集便可
<%@page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
2.傳值亂碼
第一種解決方案:
<!-- 配置請求過濾器,編碼格式設爲UTF-8,避免中文亂碼--> <filter> <filter-name>springUtf8Encoding</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> |
第二種解決方案:
設置request字符集
①先打印request自己默認的字符集
System.out.println(request.getCharacterEncoding());
②打印的不是須要的字符集,則設置相應的字符集便可
request.setCharacterEncoding("UTF-8");
③若是2處理不了就用這個解決
String str=newString((request.getParameter("bigQuestionTypeName")).getBytes("iso-8859-1"),"utf-8")
3.存入數據庫亂碼
①標準狀況會在相應的後面加上相應的字符集設置
jdbcUrl=jdbc:mysql:///itcastoa?useUnicode=true&characterEncoding=UTF-8
useUnicode就不用說了,鏈接數據庫中設置的字符集,&這是什麼的?這就有問題了,在xml中&是&的轉義字符。若是你是用xml來配置對應的數據庫鏈接配置的話就沒有什麼問題了。可是若是用的是**.properties就有問題了,則必須將amp除去便可。
②數據庫
分別設置服務器、數據庫和數據表部分的編碼,必須設置鏈接編碼
mysql> SET character_set_client='gbk';
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
設置好鏈接編碼,就能夠插入中文。(其實用一句話就能夠解決了)
查看數據庫編碼格式
show variables like 'character_set_%';
查看數據庫中的表的建立
show create table tablename;
設置數據庫編碼格式
setnames 'gbk';
2018年11月12日19:53:38