|
做java web開發(fā)是不是會遇到編碼問題,有網(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介紹的一些知識: 字符編碼簡介 ASCII:只提供對128個英文字符的支持 ISO8859-1:每個字節(jié)表示一個字符,一個中文字符表示成兩個字符,占兩個字節(jié)UTF-8:英文占一個字節(jié),中文占兩個或三個字節(jié) GB2312:英文占一個字節(jié),中文占兩個字節(jié) GBK:在GB2312基礎(chǔ)上提供了對擴(kuò)展中文字符的支持 Big5:臺灣使用的繁體中文的編碼,類似于GB2312 Javac命令行參數(shù)-encoding指定了java源文件使用的編碼 Java命令行參數(shù)-Dfile.encoding指定了class文件使用的編碼 JDK 1.4中引入了java.nio.charset package ============================================================ IE里的編碼行為 影響編碼的選項(xiàng): 1.“工具/Internet選項(xiàng)”菜單下的“高級/始終以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”時: 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è)置正確的NLS_LANG環(huán)境變量 *注釋:l10n i18n都是縮寫:用的是英文單詞的首尾字母和其間字母個數(shù) l10n: localization 本地化 i18n: internationalization 國際化 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=430712 |
|
|