做java web開發(fā)是不是會(huì)遇到編碼問題,有網(wǎng)頁之間參數(shù)傳遞的,也有與數(shù)據(jù)庫存取有關(guān)的.下面是介紹相關(guān)內(nèi)容的文章.
從 漢化 到 國際化 這是我們公司總結(jié)的一些關(guān)于中文亂碼問題的一些解決方案和經(jīng)驗(yàn)和大家分享!
遇到編碼問題主要是由于Tomcat服務(wù)器端接收request對象默認(rèn)是ISO_8859_1編碼方式,對于大量解決中文問題看到過添加Filter方式來統(tǒng)一解決.
其實(shí)在POST前可通過request.setCharacterEncoding("GBK");來解決.
對于Java由于默認(rèn)的編碼方式是 UNICODE,所以用中文也易出問題,常見的解決是
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
//由于String類的構(gòu)造方法可以使用指定的編碼方式,缺省使用本地編碼.則getBytes 方法用于將中文字符以“ISO-8859-1”編碼方式轉(zhuǎn)化成字節(jié)數(shù)組,而“GBK” 是目標(biāo)編碼方式。
------------------------------------------------------------------------------------------------------------
下面是weblogic介紹的一些知識(shí):
字符編碼簡介ASCII:只提供對128個(gè)英文字符的支持
ISO8859-1:每個(gè)字節(jié)表示一個(gè)字符,一個(gè)中文字符表示成兩個(gè)字符,占兩個(gè)字節(jié)UTF-8:英文占一個(gè)字節(jié),中文占兩個(gè)或三個(gè)字節(jié)
GB2312:英文占一個(gè)字節(jié),中文占兩個(gè)字節(jié)
GBK:在GB2312基礎(chǔ)上提供了對擴(kuò)展中文字符的支持
Big5:臺(tái)灣使用的繁體中文的編碼,類似于GB2312
Javac命令行參數(shù)-encoding指定了java源文件使用的編碼
Java命令行參數(shù)-Dfile.encoding指定了class文件使用的編碼
JDK 1.4中引入了java.nio.charset package
============================================================
IE里的編碼行為影響編碼的選項(xiàng):
1.“工具/Internet選項(xiàng)”菜單下的“高級(jí)/始終以UTF-8發(fā)送URL”(IE缺省設(shè)置)
2.HTML的head標(biāo)簽里的指定的content Type:<meta http-equiv=“Content-Type”content=“text/html”charset=“gbk”>
3.運(yùn)行瀏覽器的windows的區(qū)域設(shè)置,這影響本機(jī)的缺省編碼
對于post方式:url采用UTF-8編碼,再作URL Encoding;
parameter部分(及url里帶的參數(shù))采用HTML head里指定的編碼(未指定使用本地缺省編碼),但不作URL Encoding;
post數(shù)據(jù)采用HTML head里指定的編碼,再作URL Encoding(content type為application/x-www-form-urlencoded 的情況下)
不選中“始終以UTF-8發(fā)送URL”時(shí):url、parameters和post數(shù)據(jù)均采用HTML head里指定的編碼(未指定使用本地缺省編碼);除了post數(shù)據(jù),其他部分均不做URL Encoding
附:HTTP 1.1 規(guī)范:RFC2396 : uric = reserved | unreserved | escaped
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
unreserved =alphanum| mark mark = "-" | "_" | "." | "!" | "~" | "*" | "‘" | "(" | ")"
escaped = "%" hex hex hex = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f“
Servlet2.3關(guān)于HttpServletRequest的說明:getRequestURI() : not decoded
getServletPath() : decoded
--------------------------------------------------------------------------------------------------------------------------常見問題及解決:Q:jsp里邊的所有中文在瀏覽器端顯示不正常:
A:<%@ pagecontentType=“text/html;charset=GBK“%>
為使瀏覽器能正確顯示中文,應(yīng)在HTML <HEAD> 部分增加:
<meta http-equiv="ContentType"content="text/html"charset="gbk">
Q:response.setContentType(“Application/msword”)返回的word文檔亂碼:
A:在content type中指定編碼:response.setContentType(“application/msword;charset=\”GBK\””)
其他編碼問題:對于Oracle數(shù)據(jù)庫:使用select * from NLS_DATABASE_PARAMETERS;來查看數(shù)據(jù)庫的字符集設(shè)置
使用alter database character set utf8來修改
使用oci driver時(shí),需要在客戶端設(shè)置正確的NLS_LANG環(huán)境變量
*注釋:l10n i18n都是縮寫:用的是英文單詞的首尾字母和其間字母個(gè)數(shù)
l10n: localization 本地化
i18n: internationalization 國際化
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=430712