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