主要是mysql數據庫亂碼問題,關于網頁中的亂碼(JSP頁面亂碼,action亂碼)都好解決,只要頁面的編碼統一就可以了。我比較喜歡用UTF-8編碼,不是很喜歡GBK或GB2312編碼。
關于JSP頁面及action只需添加一個EncodingFilter就可以了,代碼如下:
在web.xml中注冊這個Filter,注意他的位置必須放在需要調用action及jsp或其他頁面聲明之前
同時在連接mysql數據庫的時候也要改為jdbc:mysql://localhost:3306/mldn?useUnicode=true&characterEncoding=utf-8 如果連接在java代碼中使用,請使用&,如果是在xml中使用請寫成&。
關于mysql的collation字符集和mysql的characterSet字符集問題,查了很多資料都說要設置成一樣,我想那只是針對如果你選GBK作為數據庫編碼的時候所用,但如果選用UTF8作為數據庫編碼的時候就不一定正確了。
今天根據網上的資料將所有的characterSet設置成utf8(可用mysql> SHOW VARIABLES LIKE 'character_set_%';查看),一直在測試亂碼問題解決沒有。在測試過程發現傳遞的中文都是正確的,可就是在MySQL Client中查看的是亂碼,所以繼續找方法解決,但其實這個時候你插進去的中文已經是正常的了,只是在MySQL Client中顯示是亂碼。那么為什么會這樣?MySQL Client設置成UTF8的時候中文不能正常顯示,此時我們應該將charact_set_client :設置成gbk,這樣就可以正常顯示中文了。
可以在my.ini中
而下面的default-character-set=utf8,兩個default-character-set的設置是不一樣的。當然如果你選用gbk作為數據庫編碼,是需要設置成一樣的。
關于JSP頁面及action只需添加一個EncodingFilter就可以了,代碼如下:
1
package cn.zhang.myznt.filter;
2
3
import java.io.IOException;
4
5
import javax.servlet.Filter;
6
import javax.servlet.FilterChain;
7
import javax.servlet.FilterConfig;
8
import javax.servlet.ServletException;
9
import javax.servlet.ServletRequest;
10
import javax.servlet.ServletResponse;
11
12
public class EncodingFilter implements Filter {
13
private String charset = null;
14
public void destroy() {
15
16
}
17
18
public void doFilter(ServletRequest request, ServletResponse response,
19
FilterChain chain) throws IOException, ServletException {
20
request.setCharacterEncoding(this.charset);
21
chain.doFilter(request, response);
22
23
}
24
25
public void init(FilterConfig arg0) throws ServletException {
26
this.charset = arg0.getInitParameter("charset");
27
}
28
29
}
30

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

在web.xml中注冊這個Filter,注意他的位置必須放在需要調用action及jsp或其他頁面聲明之前
1
<filter>
2
<filter-name>encoding</filter-name>
3
<filter-class>cn.zhang.myznt.filter.EncodingFilter</filter-class>
4
<init-param>
5
<param-name>charset</param-name>
6
<param-value>UTF-8</param-value>
7
</init-param>
8
</filter>
9
<filter-mapping>
10
<filter-name>encoding</filter-name>
11
<url-pattern>/*</url-pattern>
12
</filter-mapping>

2

3

4

5

6

7

8

9

10

11

12

同時在連接mysql數據庫的時候也要改為jdbc:mysql://localhost:3306/mldn?useUnicode=true&characterEncoding=utf-8 如果連接在java代碼中使用,請使用&,如果是在xml中使用請寫成&。
關于mysql的collation字符集和mysql的characterSet字符集問題,查了很多資料都說要設置成一樣,我想那只是針對如果你選GBK作為數據庫編碼的時候所用,但如果選用UTF8作為數據庫編碼的時候就不一定正確了。
今天根據網上的資料將所有的characterSet設置成utf8(可用mysql> SHOW VARIABLES LIKE 'character_set_%';查看),一直在測試亂碼問題解決沒有。在測試過程發現傳遞的中文都是正確的,可就是在MySQL Client中查看的是亂碼,所以繼續找方法解決,但其實這個時候你插進去的中文已經是正常的了,只是在MySQL Client中顯示是亂碼。那么為什么會這樣?MySQL Client設置成UTF8的時候中文不能正常顯示,此時我們應該將charact_set_client :設置成gbk,這樣就可以正常顯示中文了。
可以在my.ini中
[mysql]
default-character-set=gbk
而下面的default-character-set=utf8,兩個default-character-set的設置是不一樣的。當然如果你選用gbk作為數據庫編碼,是需要設置成一樣的。