?? struts國際化+mysql中文亂碼的問題.txt
字號:
struts國際化+mysql中文亂碼的問題
作者:lpeng211984
花了三個多小時解決的struts國際化+mysql中文亂碼的問題
動力:都是這個很多字段數據表惹的禍,本來大概3個星期前就決定在代碼里硬編碼處理(那時折騰了前前后后近30小時),現在節約了很多時間哦。。。。爽。。。。。休息下,晚上繼續
瀏覽器 默認以UTF-8發送請求
數據庫 一般是ISO-8859-1 useUnicode=true&characterEncoding=GBK可以同一編碼
tomcat編譯jsp 是ISO-8859-1
做法:
jsp:<%@ page contentType="text/html;charset=UTF-8" language="java"%>
數據庫:jdbc:mysql://127.0.0.1:3306/edusys?useUnicode=true&characterEncoding=GBK
現象:
1.數據庫里是中文也能顯示成中文 --是什么樣就顯示成什么樣,說明useUnicode=true&characterEncoding=GBK有起到同一編碼的作用,所以應該是從html到jsp編譯成的servlet之間出問題了
2.如果在java代碼里加入:
類似于這樣的:String sort = new String(user.getSort().getBytes("ISO-8859-1"),"UTF-8");
操作數據庫就沒問題了
3.換成<%@ page contentType="text/html;charset=ISO-8859-1" language="java"%>問題就變成存入數據庫的是些byte 碼,讀出到頁面上不會亂碼
結論:
1。用native2ascii -encoding gb2312 User_zh_CN.bak User_zh_CN.properties處理的目的是可以同一用UTF-8來編碼jsp頁面
2。只要在交給業務邏輯代碼處理前把編碼設置成UTF-8(而不是GB2312!!!! 原來就錯在這里,那時沒理解透)就可以了
用到了filter,相應到網上搜下一打把.
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>com.lpeng.webapp.base.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在這過程學到其他的東西:
1。再遇到困難的時候第一要保持清醒的頭腦 用來思考,而不是在沒想清楚之前就拼命的猜測測試,然后讓把心情搞的壞到罵人
2。decode解碼,encode編碼,so:
getBytes(String charsetName)
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.
和
String(byte[] bytes, String charsetName)
Constructs a new String by decoding the specified array of bytes using the specified charset.
就很好理解了
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -