亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        jsp中文編碼亂碼的分析與解決

        2011-08-29 05:39:44姚竟發(fā)唐小強(qiáng)
        科技傳播 2011年24期
        關(guān)鍵詞:編碼方式亂碼字節(jié)

        姚竟發(fā),唐小強(qiáng)

        保定電力職業(yè)技術(shù)學(xué)院,河北保定 071000

        0 引言

        JSP(Java Server Pages)是由Sun公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),jsp技術(shù)采用java作為開發(fā)腳本語言,java本身有著很好的跨平臺(tái)性,但是jsp在結(jié)合頁面技術(shù)后,最使人頭疼的一個(gè)問題就是不能很好的處理中文亂碼問題,在開發(fā)過程中帶來諸多不便,本文從剖析中文亂碼產(chǎn)生的各種原因入手,并給出相應(yīng)的解決方案。

        1 中文亂碼的根源

        1)中文的編碼很多,在不同的情況下可能有多種不同的二進(jìn)制值;

        2)在某些應(yīng)用中傳遞數(shù)據(jù)時(shí),可能把中文轉(zhuǎn)換成其它形式;

        3)在一個(gè)應(yīng)用系統(tǒng)中,編碼之間存在各種各樣的轉(zhuǎn)換;

        4)在轉(zhuǎn)換過程中需要制定編碼方式;

        5)在具體實(shí)踐過程中,可能忽略或忘記設(shè)置編碼;

        6)不同的軟件環(huán)境其編碼設(shè)置方式不同也容易導(dǎo)致中文亂碼;

        7)編碼工具的多樣性以及對(duì)編碼的模糊認(rèn)識(shí)不清。

        2 常見的jsp頁面中文亂碼

        網(wǎng)上常出現(xiàn)的 JSP/Servlet encoding 問題一般都表現(xiàn)在 browser或應(yīng)用程序端,如:

        瀏覽器中看到的 Jsp/Servlet 頁面中的漢字怎么都成了‘?’;瀏覽器中看到的 Servlet 頁面中的漢字怎么都成了亂碼;JAVA 應(yīng)用程序界面中的漢字怎么都成了方塊;Jsp/Servlet 頁面無法顯示GBK 漢字;Jsp/Servlet 不能接收 form 提交的漢字;JSP/Servlet 數(shù)據(jù)庫讀寫無法獲得正確的內(nèi)容。

        3 中文亂碼產(chǎn)生原因分析

        1)在jsp中如果指定了<%@ page contentType="text/html;charset=A" %>,那么在該jsp中所有用到的數(shù)據(jù),如果沒有指定編碼,那么這些數(shù)據(jù)的編碼方式為A。

        從request得到的數(shù)據(jù)如果沒有指定request的編碼的話,默認(rèn)編碼為iso-8859-1。

        假設(shè)從別的地方得到的數(shù)據(jù)是使用原來初始的編碼的,比如從數(shù)據(jù)庫得到數(shù)據(jù),如果數(shù)據(jù)庫的編碼是B,那么該數(shù)據(jù)的編碼是B而不是A,也不是系統(tǒng)默認(rèn)的,此時(shí),如果要輸出的數(shù)據(jù)的編碼不是A,那么,很可能顯示亂碼,所以首先要將數(shù)據(jù)正確轉(zhuǎn)化為編碼A,然后再輸出;

        2)在jsp中如果沒有指定<%@ page contentType="text/html;charset=A" %>,那么默認(rèn)的A編碼為iso-8859-1;

        3)Servlet中 如 果 執(zhí) 行 了 像 response.setContentType("text/html;charset=A"),說明將response的字符輸出流編碼設(shè)置為A,所有要輸出的數(shù)據(jù)的編碼要轉(zhuǎn)化為A,否則就會(huì)出現(xiàn)亂碼。Servlet中從request得到的數(shù)據(jù)的編碼和jsp中一樣的,但是在servlet java文件中構(gòu)造的數(shù)據(jù)是使用是系統(tǒng)默認(rèn)的編碼(iso-8859-1);servlet中從外部得到的數(shù)據(jù)使用的是原來的編碼,比如從編碼為B的數(shù)據(jù)庫得到的數(shù)據(jù)是編碼為B,不是A,也不是系統(tǒng)默認(rèn)的編碼。

        4 中文亂碼解決方案

        4.1 JSP頁面顯示為亂碼

        <%@ page contentType="text/html; charset=gb2312"%>,就可以消除亂碼了。

        4.2 Servlet接收Form/Request傳遞的參數(shù)時(shí)顯示為亂碼

        方法1:在使用request獲取參數(shù)前,加上此語句:request.setCharacterEncoding("A"), 此處設(shè)置的編碼要和傳遞參數(shù)的頁面采用的編碼方式一致。

        方法2:使用過濾器(filter),在doFilter方法中做如下處理:

        }同時(shí),在web.xml中配置該過濾器:

        4.3 JSP接收Form/Request傳遞的參數(shù)時(shí)顯示為亂碼

        servlet可以處理中文后,jsp頁面接收Form/Request傳遞的參數(shù)卻仍然顯示為亂碼。

        如果你的表單內(nèi)容為

        ,也就是說沒有指定form的method屬性。而問題就發(fā)生在此,F(xiàn)orm的默認(rèn)mothod屬性為get. 而get是通過在發(fā)送請(qǐng)求的url后面加?然后加參數(shù)和值來傳遞數(shù)據(jù)的的,編碼格式為ASCII.這就要求我們?cè)趥鬟f的數(shù)據(jù)中有非ASCII字符或是超過了100個(gè)字符,那么你必須使用method="post",否則就會(huì)出現(xiàn)亂碼。所以解決方式為:第二種亂碼的解決方式+在發(fā)送頁面的Form中指定method為post。

        4.4 數(shù)據(jù)庫中的中文出現(xiàn)亂碼

        只要涉及中文的地方全部是亂碼,解決辦法:在數(shù)據(jù)庫的數(shù)據(jù)庫URL中加上useUnicode=true&characterEncoding=gb2312就OK了。

        4.5 客戶端讀取數(shù)據(jù)庫中文亂碼

        通過數(shù)據(jù)庫客戶端(比如 ODBC 或 JDBC)從數(shù)據(jù)庫服務(wù)器中讀取字符串時(shí),客戶端需要從服務(wù)器獲知所使用的編碼。當(dāng)數(shù)據(jù)庫服務(wù)器發(fā)送字節(jié)流給客戶端時(shí),客戶端負(fù)責(zé)將字節(jié)流按照正確的編碼轉(zhuǎn)化成 UNICODE字符串。如果從數(shù)據(jù)庫讀取字符串時(shí)得到亂碼,而數(shù)據(jù)庫中存放的數(shù)據(jù)又是正確的。解決的辦法還是通過string = newString(string.getBytes("iso-8859-1"), "GB2312") 的方法,重新得到原始的字節(jié)串,再重新使用正確的編碼轉(zhuǎn)化成字符串。

        4.6 頁面在編輯工具中打開時(shí)中文亂碼

        在編輯工具中打開一個(gè)已經(jīng)存在的項(xiàng)目,頁面開始的編碼如果是gb2312,而打開該頁面的工具默認(rèn)的編碼如果是iso8859-1(例如myeclipse和dreamweaver),這時(shí)可能產(chǎn)生亂碼,直接修改編輯工具的編碼方式與原來頁面編碼一致即可。

        5 結(jié)論

        上面提到的方法應(yīng)該能解決大部分亂碼問題,如果在其他地方還出現(xiàn)亂碼,可能需要手動(dòng)修改代碼。解決Java亂碼問題的關(guān)鍵在于在字節(jié)與字符的轉(zhuǎn)換過程中,你必須知道原來字節(jié)或轉(zhuǎn)換后的字節(jié)的編碼方式,轉(zhuǎn)換時(shí)采用的編碼必須與這個(gè)編碼方式保持一致。

        [1]劉政.JSP數(shù)據(jù)庫Tomcat產(chǎn)生亂碼解決方案總結(jié)及原因(轉(zhuǎn)一).新浪博客,1994.

        [2]孫鑫.servlet/jsp深入詳解.電子工業(yè)出版社,2008.

        猜你喜歡
        編碼方式亂碼字節(jié)
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        這些真的不是亂碼,是漢字
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        簡談MC7字節(jié)碼
        GCOA算法
        可穿戴式多通道傳感系統(tǒng)功能需求分析及設(shè)計(jì)
        混合編碼方式自適應(yīng)差分進(jìn)化算法優(yōu)化設(shè)計(jì)寬帶天線
        炫邁:用神奇亂碼勾引你視線
        淺談?dòng)?jì)算機(jī)網(wǎng)絡(luò)通信中實(shí)時(shí)差錯(cuò)控制技術(shù)
        如何解決Tomcat的亂碼
        人人妻人人玩人人澡人人爽| 蜜臀av毛片一区二区三区| 日韩av无码一区二区三区不卡| 性色av无码一区二区三区人妻| 无码国产精品第100页| 亚洲一区二区三区毛片| 久久久久av综合网成人| 国模欢欢炮交啪啪150| 免费成人福利视频| 蜜桃在线观看免费高清| 国产精品第一二三区久久| 国产精品一区二区久久乐下载| 欧美伊人网| 一本大道加勒比东京热| 老女老肥熟女一区二区| 激情偷乱人成视频在线观看| 久久精品国产亚洲Av无码偷窍| 亚洲二区精品婷婷久久精品| 内射中出日韩无国产剧情| 亚洲欧洲偷自拍图片区| 不卡a v无码在线| 人妻中文字幕一区二区视频| 免费a级毛片无码a∨中文字幕下载| 亚洲免费观看在线视频| 人妻少妇av中文字幕乱码免费| av在线免费观看网站,| 久久精品国产久精国产| 欧美视频九九一区二区| 日韩精品视频中文字幕播放| 麻豆亚洲av熟女国产一区二| 国产成人无码av在线播放dvd| 日韩av无码午夜福利电影| 华人在线视频精品在线| 777亚洲精品乱码久久久久久| 亚洲国产A∨无码影院| 91精品国产综合久久国产| 色综合久久无码五十路人妻| 欧美精品免费观看二区| 国产一区二区精品av| 国产成人自拍高清在线| 久久男人av资源网站无码|