主要是mysql數(shù)據(jù)庫(kù)亂碼問(wèn)題,關(guān)于網(wǎng)頁(yè)中的亂碼(JSP頁(yè)面亂碼,action亂碼)都好解決,只要頁(yè)面的編碼統(tǒng)一就可以了。我比較喜歡用UTF-8編碼,不是很喜歡GBK或GB2312編碼。
關(guān)于JSP頁(yè)面及action只需添加一個(gè)EncodingFilter就可以了,代碼如下:
在web.xml中注冊(cè)這個(gè)Filter,注意他的位置必須放在需要調(diào)用action及jsp或其他頁(yè)面聲明之前
同時(shí)在連接mysql數(shù)據(jù)庫(kù)的時(shí)候也要改為jdbc:mysql://localhost:3306/mldn?useUnicode=true&characterEncoding=utf-8 如果連接在java代碼中使用,請(qǐng)使用&,如果是在xml中使用請(qǐng)寫成&。
關(guān)于mysql的collation字符集和mysql的characterSet字符集問(wèn)題,查了很多資料都說(shuō)要設(shè)置成一樣,我想那只是針對(duì)如果你選GBK作為數(shù)據(jù)庫(kù)編碼的時(shí)候所用,但如果選用UTF8作為數(shù)據(jù)庫(kù)編碼的時(shí)候就不一定正確了。
今天根據(jù)網(wǎng)上的資料將所有的characterSet設(shè)置成utf8(可用mysql> SHOW VARIABLES LIKE 'character_set_%';查看),一直在測(cè)試亂碼問(wèn)題解決沒(méi)有。在測(cè)試過(guò)程發(fā)現(xiàn)傳遞的中文都是正確的,可就是在MySQL Client中查看的是亂碼,所以繼續(xù)找方法解決,但其實(shí)這個(gè)時(shí)候你插進(jìn)去的中文已經(jīng)是正常的了,只是在MySQL Client中顯示是亂碼。那么為什么會(huì)這樣?MySQL Client設(shè)置成UTF8的時(shí)候中文不能正常顯示,此時(shí)我們應(yīng)該將charact_set_client :設(shè)置成gbk,這樣就可以正常顯示中文了。
可以在my.ini中
而下面的default-character-set=utf8,兩個(gè)default-character-set的設(shè)置是不一樣的。當(dāng)然如果你選用gbk作為數(shù)據(jù)庫(kù)編碼,是需要設(shè)置成一樣的。
關(guān)于JSP頁(yè)面及action只需添加一個(gè)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中注冊(cè)這個(gè)Filter,注意他的位置必須放在需要調(diào)用action及jsp或其他頁(yè)面聲明之前
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

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