用UTF-8完全解決JSP+MYSQL多國語言文字編碼問題

來源:互聯網
上載者:User
 

用UTF-8完全解決JSP+MYSQL多國語言文字編碼問題

此問題這是本人經過數天努力,查遍網上所有此類文章最後自己解決的。轉載請務必註明出處:
http://blog.donews.com/ralix/

首先說明幾點:
在檔案中任何時候出現utf-8、UTF-8、utf8、UTF8其作用都是一樣的。tomcat、resin、mysql可沒有我們這麼笨。網上許多文章還煞有介事的特別指出其一個個的區別,純屬無稽之談。

我的軟體環境:
中文WINDOWS XP (linux可作相應修改)
Apache Tomcat 5.5.6 Server
phpMyAdmin 2.6.4-pl4
MySQL 5.0.19-nt

按下面步驟修改:

一、在JSP靜態檔案中正確顯示UTF-8:

1、JSP檔案用支援UTF-8的文字編輯器編輯,如EditPlus、UltraEdit,並把原來ascii轉換成utf-8(菜單裡有)。

2、JSP檔案頭改成:
<%@ page contentType="text/html; charset=UTF-8" language="java"  import="java.sql.*"%>
有無這句無所謂(但在.html檔案中是必要的):
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>

二、FORM的正確提交:

1、getParameter之前加入:
request.setCharacterEncoding("utf-8");
這一步也可以用Filter的辦法,參見其它文章。

2、request時,只需要寫成最簡單的形式:
String name1= new String(request.getParameter("username"));
String pwd1= new String(request.getParameter("password"));

三、串連mysql:

1、mysql設定檔:
修改mysql在windows/my.ini裡default-character-set=utf-8

2、mysql裡資料庫和表也都設為utf8_unicode_ci

3、資料庫連結:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,關鍵就在於此:此句中間是'&'不是'&amp;'在www.Jdon.com的banq和許多牛人的文章中都寫成了'&amp;'。這可能是發文章時html自動轉化的。但這的確給我們帶來了很大的麻煩。會產生如下錯誤或問號:
java.sql.SQLException:
Syntax error or access violation, message from server: "You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ''asdf' at line
1"

至此,在頁面上顯示中文、從資料庫讀取並顯示、插入、修改中文都正常了。
並且由於是utf-8,您可以試一下,在form裡同時輸入中文、英文、日文、韓文,照樣正常顯示。

PS:
雖然沒有完全測試過,但在我的使用中作業系統、JDK、TOMCAT或resin的編碼對此問題沒有造成影響。
我測試時resin初始化顯示的JDK就是GBK、zh,但沒有問題。
另外,.java檔案是utf-8還是ascii編碼都沒有關係,產生的.class一樣能用。

經樓下朋友的提醒,我需要補充一下:
1、資料庫連結時,在.jsp和.java檔案中應該用&號,而XML檔案中需要用&amp; 這也是banq的本意。只是我們太菜沒能直接領會。
2、在我的測試中,connector-J已經是3.0以上但如果不加useUnicode=true&characterEncoding=utf-8訪問資料庫還是會有問題。所以建議還是加上。

PS2:
對用GET提交的中文問題,修改tomcat/conf/server.xml
<Connector acceptCount='100' connectionTimeout='20000'  .../>最後加入:URIEncoding='utf-8'

PS3:
最近發現MYSQL在windows/my.ini裡,必須寫成utf8,這是與mysql/share/charsets裡的編碼相對應的。

大功告成,語言大統。

 

-------------------------------------------------以上為網上轉載----------------------------------------

 

補充:

若是get請求,request會用容器預設的編碼方式,故參數的編碼就要出錯,post則以請求來源頁面的編碼為準,故若要使用get請求,就要修改tomcat的server.xml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.