? ?今天幫小朋友做一個項目,碰到一個挺搞的問題。在幫她安裝mysql的時候一直是next,沒有去注意一些細節,不曉得有沒有漏掉設置編碼那一部分=。=。
? ?結果在用sql文件導入數據庫MySQL?-h?localhost?-u?root?-p?xxx?<?e:\xxx.sql ?執行的時候錯誤提示出來了,顯然是編碼的問題,(問題描述類似這樣:)后來用status看了一下。
? ?server characterset,DB characterset,client?characterset,conn characterset 都是Latin1. 顯然問題出現在這里。然后停止了服務,找到my.ini,修改了相應的地方。在[mysql][mysqld][client] 的默認編碼改成gbk。啟動服務,搞定~
? ?不過這樣的問題的背后其實并沒有那么簡單,在網上找找資料,摘錄并總結如下:
- ? ?server本身設定問題,例如還停留在latin1.(我剛才的問題)
- JSP設計頁面上是中文,但運行時看到的是亂碼,如果是這種情況,就要指定jsp頁面的編碼,默認情況下,jsp頁面的編碼是ISO-8859-1,解決方法就是在jsp頁面的編碼地方加入
?
-
<%@?page?language="java"?contentType="text/html;charset=utf8"?%>,
當用Request對象獲取客戶提交的漢字時,會出現亂碼,那么就需要在項目中加入filter了,(filter在tomcat中自帶的有例子,可以照著例子改一下,也可以在googl中搜索一下)
由于使用doget方法引起的亂碼,可以試著使用dopost提交,
或者是打開tomcat的server.xml文件,找到區塊,加入如下一行:?URIEncoding=”GBK”?
完整的應如下:?
<Connector?port="8080"?maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
enableLookups="false"?redirectPort="8443"?acceptCount="100"?debug="0"
?connectionTimeout="20000"?disableUploadTimeout="true"?URIEncoding="utf8"/>
需要重啟tomcat。 -
寫入到數據庫是亂碼:?
如果你是通過JDBC直接鏈接數據庫的時候,配置的代碼如下:
jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=utf8,
這樣保證到數據庫中的代碼是不是亂碼。
? ?