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

        ?

        Java Web應(yīng)用開發(fā)中的常見亂碼形式及解決方法

        2017-06-20 08:57:17賈曉芳沈澤剛
        軟件導(dǎo)刊 2017年4期
        關(guān)鍵詞:web技術(shù)

        賈曉芳+沈澤剛

        摘要:在運(yùn)用Java Web 技術(shù)開發(fā)Web應(yīng)用程序時,要根據(jù)計(jì)算機(jī)存儲以及傳輸?shù)淖址幋a的標(biāo)準(zhǔn)進(jìn)行編程,字符編碼不統(tǒng)一會導(dǎo)致多種情況的亂碼問題。從亂碼問題產(chǎn)生的根本原因著手分析,從字符編碼以及轉(zhuǎn)換關(guān)系對影響字符編碼的因素進(jìn)行系統(tǒng)分析,并給出可行的解決方案。

        關(guān)鍵詞:Java Web技術(shù);字符編碼;中文亂碼

        中圖分類號:TP301

        文獻(xiàn)標(biāo)識碼:A

        文章編號:16727800(2017)004021403

        0引言

        Java語言在應(yīng)用軟件開發(fā)方面逐漸取代其它編程語言成為網(wǎng)絡(luò)編程首選語言。Java技術(shù)提供跨平臺性,支持網(wǎng)絡(luò)與數(shù)據(jù)庫技術(shù),已廣泛應(yīng)用于移動互聯(lián)網(wǎng)、網(wǎng)絡(luò)開發(fā)平臺等領(lǐng)域。在Java Web應(yīng)用開發(fā)過程中,伴隨著各種亂碼問題的出現(xiàn),這給程序員的軟件開發(fā)工作帶來很多麻煩,解決亂碼問題是Java Web應(yīng)用程序開發(fā)過程中需解決的首要問題。本文將對開發(fā)過程中常出現(xiàn)的幾種亂碼問題的原因及影響因素進(jìn)行分析,并給出具體可行的解決方案。

        1Java Web應(yīng)用中的常用編碼

        在Java Web應(yīng)用開發(fā)中,字符編碼轉(zhuǎn)化是必要過程,常用到UTF-8、Unicode、GB2312/GBK、ISO-8859-1這幾類。UTF-8是廣泛應(yīng)用于程序開發(fā)中的雙字節(jié)編碼,在Unicode字符集中以一種多字節(jié)編碼的形式存在,能與Unicode編碼進(jìn)行可逆字符轉(zhuǎn)換同時兼容ISO-8859-1編碼。該編碼本身帶有校驗(yàn)功能,在網(wǎng)頁上多會出現(xiàn)關(guān)于中文簡體或者其它語言的提醒。Unicode編碼是統(tǒng)一字符編碼的標(biāo)準(zhǔn)集,是唯一的二進(jìn)制計(jì)算機(jī)字符編碼,能表示所有語言的字符,不受語言與運(yùn)行平臺的限制,可以進(jìn)行跨語言、跨平臺的文本轉(zhuǎn)換操作,使用0~65 535的雙字節(jié)無符號對每一個字符進(jìn)行編碼,確保每個字符的表示方式唯一。 GB2312/GBK編碼屬于國標(biāo)碼,用來表示中文的雙字節(jié)字符編碼,其中GBK編碼表示簡體字和繁體字,完全兼容GB2312編碼,屬于GB2312編碼的擴(kuò)充編碼,GB2312編碼可以兼容ASCII碼,但僅能表示中文簡體字。ISO-8859-1編碼屬于單字節(jié)編碼,向下兼容ASCII碼,應(yīng)用于英文系統(tǒng),字符范圍只有0~255,無法表示中文字符,在很多協(xié)議上作為默認(rèn)編碼,在Java網(wǎng)絡(luò)傳輸中作為標(biāo)準(zhǔn)字符集應(yīng)用。 在英文字符的網(wǎng)頁上只能使用ISO-8859-1編碼,在只出現(xiàn)中文的網(wǎng)頁上,只能選擇中文系列的字符編碼。尤其是UTF-8編碼,UTF系列中文字符編碼在實(shí)際中比較常用,使用這種編碼會降低亂碼出現(xiàn)機(jī)率。

        2Java Web的編碼及轉(zhuǎn)換機(jī)制

        2.1Unicode與常用編碼之間的直接轉(zhuǎn)換

        Unicode與GB2312/GBK、UTF-8都是中文字符編碼。轉(zhuǎn)換時有轉(zhuǎn)換規(guī)則,都是通過字節(jié)轉(zhuǎn)換為字符串,區(qū)別是每個漢字轉(zhuǎn)換成的字節(jié)數(shù)不同。圖1所示是在中文系統(tǒng)中常用編碼之間的轉(zhuǎn)換關(guān)系,需要Unicode編碼輔助完成編碼轉(zhuǎn)換,了解中文系統(tǒng)常用編碼轉(zhuǎn)化規(guī)則就可以避免亂碼問題。

        2.2編碼轉(zhuǎn)換機(jī)制

        為了使Java語言開發(fā)的Web應(yīng)用程序可以在各種平臺下無限制運(yùn)行,Java內(nèi)部規(guī)定統(tǒng)一使用Unicode字符編碼來表示字符集,Java源程序根據(jù)操作系統(tǒng)默認(rèn)的編碼方式完成轉(zhuǎn)碼,最終轉(zhuǎn)化成UTF-8編碼形式寫入.class文件中。例如操作系統(tǒng)默認(rèn)GBK編碼,編譯時要將GBK編碼先與Unicode編碼進(jìn)行轉(zhuǎn)換,然后轉(zhuǎn)換成UTF-8格式寫入.class文件中。按照這樣的轉(zhuǎn)換方式就不容易在中文系統(tǒng)中出現(xiàn)亂碼。若在英文系統(tǒng)中采用ISO-8859-1編碼轉(zhuǎn)化就不會出現(xiàn)亂碼現(xiàn)象。如圖2將簡單描述Java源程序編碼的轉(zhuǎn)換流程。

        3Java Web應(yīng)用開發(fā)中常見亂碼形式及成因

        當(dāng)Java Web技術(shù)應(yīng)用在JSP動態(tài)網(wǎng)站開發(fā)過程中,最容易出現(xiàn)亂碼現(xiàn)象,比如Jsp頁面顯示亂碼、用戶提交數(shù)據(jù)出現(xiàn)亂碼現(xiàn)象、數(shù)據(jù)庫出現(xiàn)亂碼現(xiàn)象等。

        3.1JSP頁面訪問出現(xiàn)亂碼問題

        基于Java Web技術(shù)開發(fā)應(yīng)用程序,訪問JSP頁面或Servlet 產(chǎn)生的頁面時,在本該出現(xiàn)中文字符的地方出現(xiàn)亂碼,可能存在兩個原因:一是瀏覽器的顯示問題;二是后臺代碼執(zhí)行出來的程序內(nèi)容就是亂碼。瀏覽器有問題,需要著重設(shè)置JSP或者Servlet屬性。開發(fā)工具的字符編碼出現(xiàn)問題是由于使用的Eclipse、Tomcat編程軟件默認(rèn)輸出的字符是適用于英文系統(tǒng)的ISO-8859-1編碼,若編譯時沒有更改,就容易產(chǎn)生亂碼。

        運(yùn)行環(huán)境影響正常的編譯操作,操作系統(tǒng)版本不同,操作系統(tǒng)默認(rèn)編碼與所安裝的系統(tǒng)版本不一致,若將編譯好的.class文件植入一些不支持運(yùn)行的操作系統(tǒng)就會編碼沖突,產(chǎn)生亂碼。針對該種情況,開發(fā)人員多會在不同版本的操作系統(tǒng)上,用記事本工具創(chuàng)建網(wǎng)頁源碼文件來避免亂碼,也可以用指令指明字符編碼的方式來避免瀏覽器本身的字符編碼與代碼中的字符編碼不一致所導(dǎo)致的中文亂碼現(xiàn)象。

        3.2用戶提交表單數(shù)據(jù)亂碼問題

        用戶提交表單數(shù)據(jù)時出現(xiàn)亂碼,原因是在Request對象獲取用戶提交數(shù)據(jù)的中文信息后,由于Request對象對瀏覽器提交的中文解碼不正確,導(dǎo)致輸出出現(xiàn)亂碼??梢栽诮邮沼脩籼峤坏谋韱涡畔⒌腏SP文件或者Servlet文件中正確設(shè)置response.setCharacterEncoding參數(shù),同時將客戶端請求編碼設(shè)置轉(zhuǎn)換成瀏覽器編碼。在響應(yīng)頁面上,提倡正確使用response.setCharacterEncoding(“UTF-8”),正確設(shè)置編碼方式以避免亂碼現(xiàn)象。

        3.3訪問數(shù)據(jù)庫出現(xiàn)亂碼問題

        當(dāng)應(yīng)用程序通過JDBC向數(shù)據(jù)庫寫入或者讀取數(shù)據(jù)時,傳入數(shù)據(jù)庫的數(shù)據(jù)多數(shù)以中文編碼形式存在,而Java應(yīng)用程序與數(shù)據(jù)庫傳遞數(shù)據(jù)操作時,是以ISO-8859-1編碼為默認(rèn)編碼,這時會因編碼沖突導(dǎo)致亂碼。

        4Java Web應(yīng)用開發(fā)中亂碼問題解決方案

        4.1JSP頁面訪問出現(xiàn)亂碼問題解決方案

        JSP頁面訪問出現(xiàn)亂碼問題是應(yīng)用開發(fā)過程中最普遍、復(fù)雜性較低的一種亂碼問題,開發(fā)人員為了避免這種現(xiàn)象,通常在JSP頁面部首添加:

        <% pageEncoding="UTF-8"%>。

        有時也會對軟件本身進(jìn)行設(shè)置,一般會將Eclipse中工作空間的字符編碼設(shè)置為UTF-8編碼。而Tomcat,要先找到Server.xml配置文件,找到如下代碼,在代碼的末端加入U(xiǎn)RIEncoding=”UTF-8”,再重新啟動Tomcat服務(wù)器,就能解決問題。

        4.2用戶提交表單數(shù)據(jù)亂碼問題解決方案

        在Servlet中,只對Request設(shè)置參數(shù)無法正確判斷解析URL中傳遞來的數(shù)據(jù)參數(shù),為了進(jìn)一步判斷和解決該情況的亂碼問題,在用戶提交表單數(shù)據(jù)出現(xiàn)亂碼問題時,開發(fā)人員通常選擇在Servlet中添加:

        String str=new String(request.get Parameter(“參數(shù)名”).getBytes(“ISO-8859-1”,“UTF-8”);

        提交的數(shù)據(jù)要通過HTTP的實(shí)體內(nèi)容發(fā)送給服務(wù)器,服務(wù)器接收時對Request設(shè)置正確的解碼方式,以免出現(xiàn)亂碼現(xiàn)象。

        4.3訪問數(shù)據(jù)庫出現(xiàn)亂碼現(xiàn)象解決方案

        訪問數(shù)據(jù)庫出現(xiàn)亂碼現(xiàn)象也是與字符編碼轉(zhuǎn)換有關(guān),在解決該問題時,首先要確定JSP/Servlet與數(shù)據(jù)庫采用的都是統(tǒng)一的中文編碼,然后明確數(shù)據(jù)庫中的中文數(shù)據(jù)正常,最后在MySQL中,使用配置向?qū)гO(shè)置數(shù)據(jù)庫將UTF-8編碼設(shè)置成默認(rèn)的連接對象。

        jdbc:mysql://localhost:3306/db1user=root&password=123456& useUnicode=true&characterEncoding=UTF-8

        5過濾器解決亂碼問題

        采用過濾器解決實(shí)際項(xiàng)目中出現(xiàn)的亂碼問題,對于Java Web開發(fā)應(yīng)用,過濾器主要用于過濾、攔截請求和響應(yīng)信息??梢栽赟ervlet過濾器或JSP頁面運(yùn)行之前和之后自動調(diào)動,Servlet過濾器能夠?qū)ervlet容器的請求和響應(yīng)進(jìn)行檢查和修改。通過在web.xml文件中配置過濾器和編寫實(shí)現(xiàn)過濾器功能代碼來處理亂碼問題。

        EncodingFilter com.util.MyFilter encoding utf-8 EncodingFilter /*

        在filter配置中,指定初始化參數(shù)字符編碼encoding的值為UTF-8,filter類中讀入該參數(shù)的值,并把resquest的字符編碼、response的字符編碼設(shè)置為encoding。過濾器處理亂碼的實(shí)現(xiàn)編碼如下:

        public void doFilter(ServletRequest request,ServletRequest response) throws IOException,ServletException{ String encoding=selectEncoding(request); if(encoding!=null) Request.setCharacterEncoding(encoding); chain.doFilter(request,response); }

        6結(jié)語

        研究結(jié)果表明,在Java Web技術(shù)開發(fā)應(yīng)用中存在的幾種不同情況的亂碼問題多數(shù)與字符編碼有關(guān),在程序編寫過程中字符編碼設(shè)置不統(tǒng)一或正確的編碼轉(zhuǎn)換方式不正確,都會產(chǎn)生亂碼問題。影響字符編碼的因素不僅與字符編碼自身的轉(zhuǎn)換標(biāo)準(zhǔn)有關(guān),還與軟件開發(fā)環(huán)境以及開發(fā)工具與Java輸出程序的字符編碼設(shè)置不一致有關(guān)。針對不同情況下發(fā)生的亂碼問題,應(yīng)采取有效的解決辦法。

        參考文獻(xiàn):

        [1]賈文瀟,葉慧莉.Java Web開發(fā)中的亂碼問題[J].網(wǎng)絡(luò)與信息工程,2016(6):6264.

        [2]馮忠毅,董海棠,岳建斌,等.Java Web開發(fā)中的亂碼問題分析及解決方案研究[J].科技信息,2013(19):92,101.

        [3]周兵.Java Web開發(fā)中的中文亂碼問題分析及解決方案[J].電腦知識與技術(shù),2014(29):68846888.

        [4]張言輝.J2EE平臺下漢字亂碼問題分析及解決[J].電腦知識與技術(shù):學(xué)術(shù)交流,2010(4X):30193021

        [5]楊金花.基于JSP技術(shù)中文亂碼的原因及解決方法[J].電子設(shè)計(jì)工程,2011(1):2528.〖

        (責(zé)任編輯:孫娟)

        猜你喜歡
        web技術(shù)
        基于物聯(lián)網(wǎng)的承壓特種設(shè)備管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
        基于Web技術(shù)的實(shí)驗(yàn)設(shè)備管理模式探索
        基于WEB的農(nóng)產(chǎn)品質(zhì)量追溯平臺的設(shè)計(jì)與實(shí)現(xiàn)
        營銷互通平臺的分析
        基于Web的教學(xué)管理信息系統(tǒng)的開發(fā)與實(shí)踐研究
        基于HTML5 web 技術(shù)APP快速開發(fā)研究
        吃奶呻吟打开双腿做受视频| 艳妇臀荡乳欲伦交换在线播放| 中出内射颜射骚妇| 国产a级精精彩大片免费看| 国产精品国产三级国产av主| 极品少妇一区二区三区四区视频 | 96精品免费视频大全| 18禁成人免费av大片一区| 国产三级国产精品国产专区50| 国产精品区一区二区三在线播放| 污污内射在线观看一区二区少妇 | 久久久久久99精品| 日本一区二区精品色超碰| 日本超级老熟女影音播放| 乱人伦中文视频在线| 大陆极品少妇内射aaaaa| 国产精品福利片免费看| 亚洲在中文字幕乱码熟女| 美女丝袜美腿玉足视频| 午夜免费福利小电影| 久久人妻少妇嫩草av蜜桃| 九九久久精品大片| 日本在线综合一区二区| 亚洲精品国产精品乱码在线观看| 超清精品丝袜国产自在线拍| 久久久亚洲欧洲日产国产成人无码 | 一本色道久久综合中文字幕| 国产免费操美女逼视频| 精品国产免费一区二区三区香蕉| 日韩在线一区二区三区免费视频| 久久亚洲国产精品123区| 亚洲国产大胸一区二区三区 | 日美韩精品一区二区三区| 亚洲一区二区三区日本久久九| 天天狠天天添日日拍| 豆国产95在线 | 亚洲| 亚洲视频一区二区三区免费| 日本免费一区二区三区影院| 日韩人妻一区二区三区蜜桃视频 | 女同另类一区二区三区| 欧美激情视频一区二区三区免费 |