999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2017-06-20 08:57:17賈曉芳沈澤剛
軟件導(dǎo)刊 2017年4期

賈曉芳+沈澤剛

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

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

中圖分類號(hào):TP301

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

文章編號(hào):16727800(2017)004021403

0引言

Java語言在應(yīng)用軟件開發(fā)方面逐漸取代其它編程語言成為網(wǎng)絡(luò)編程首選語言。Java技術(shù)提供跨平臺(tái)性,支持網(wǎng)絡(luò)與數(shù)據(jù)庫技術(shù),已廣泛應(yīng)用于移動(dòng)互聯(lián)網(wǎng)、網(wǎng)絡(luò)開發(fā)平臺(tái)等領(lǐng)域。在Java Web應(yīng)用開發(fā)過程中,伴隨著各種亂碼問題的出現(xiàn),這給程序員的軟件開發(fā)工作帶來很多麻煩,解決亂碼問題是Java Web應(yīng)用程序開發(fā)過程中需解決的首要問題。本文將對(duì)開發(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)換同時(shí)兼容ISO-8859-1編碼。該編碼本身帶有校驗(yàn)功能,在網(wǎng)頁上多會(huì)出現(xiàn)關(guān)于中文簡體或者其它語言的提醒。Unicode編碼是統(tǒng)一字符編碼的標(biāo)準(zhǔn)集,是唯一的二進(jìn)制計(jì)算機(jī)字符編碼,能表示所有語言的字符,不受語言與運(yùn)行平臺(tái)的限制,可以進(jìn)行跨語言、跨平臺(tái)的文本轉(zhuǎn)換操作,使用0~65 535的雙字節(jié)無符號(hào)對(duì)每一個(gè)字符進(jìn)行編碼,確保每個(gè)字符的表示方式唯一。 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í)際中比較常用,使用這種編碼會(huì)降低亂碼出現(xiàn)機(jī)率。

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

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

Unicode與GB2312/GBK、UTF-8都是中文字符編碼。轉(zhuǎn)換時(shí)有轉(zhuǎn)換規(guī)則,都是通過字節(jié)轉(zhuǎn)換為字符串,區(qū)別是每個(gè)漢字轉(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)用程序可以在各種平臺(tái)下無限制運(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編碼,編譯時(shí)要將GBK編碼先與Unicode編碼進(jìn)行轉(zhuǎn)換,然后轉(zhuǎn)換成UTF-8格式寫入.class文件中。按照這樣的轉(zhuǎn)換方式就不容易在中文系統(tǒng)中出現(xiàn)亂碼。若在英文系統(tǒng)中采用ISO-8859-1編碼轉(zhuǎn)化就不會(huì)出現(xiàn)亂碼現(xiàn)象。如圖2將簡單描述Java源程序編碼的轉(zhuǎn)換流程。

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

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

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

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

用戶提交表單數(shù)據(jù)時(shí)出現(xiàn)亂碼,原因是在Request對(duì)象獲取用戶提交數(shù)據(jù)的中文信息后,由于Request對(duì)象對(duì)瀏覽器提交的中文解碼不正確,導(dǎo)致輸出出現(xiàn)亂碼。可以在接收用戶提交的表單信息的JSP文件或者Servlet文件中正確設(shè)置response.setCharacterEncoding參數(shù),同時(shí)將客戶端請(qǐng)求編碼設(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í),傳入數(shù)據(jù)庫的數(shù)據(jù)多數(shù)以中文編碼形式存在,而Java應(yīng)用程序與數(shù)據(jù)庫傳遞數(shù)據(jù)操作時(shí),是以ISO-8859-1編碼為默認(rèn)編碼,這時(shí)會(huì)因編碼沖突導(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"%>。

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

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

在Servlet中,只對(duì)Request設(shè)置參數(shù)無法正確判斷解析URL中傳遞來的數(shù)據(jù)參數(shù),為了進(jìn)一步判斷和解決該情況的亂碼問題,在用戶提交表單數(shù)據(jù)出現(xiàn)亂碼問題時(shí),開發(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ù)器接收時(shí)對(duì)Request設(shè)置正確的解碼方式,以免出現(xiàn)亂碼現(xiàn)象。

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

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

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

5過濾器解決亂碼問題

采用過濾器解決實(shí)際項(xiàng)目中出現(xiàn)的亂碼問題,對(duì)于Java Web開發(fā)應(yīng)用,過濾器主要用于過濾、攔截請(qǐng)求和響應(yīng)信息。可以在Servlet過濾器或JSP頁面運(yùn)行之前和之后自動(dòng)調(diào)動(dòng),Servlet過濾器能夠?qū)ervlet容器的請(qǐng)求和響應(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)換方式不正確,都會(huì)產(chǎn)生亂碼問題。影響字符編碼的因素不僅與字符編碼自身的轉(zhuǎn)換標(biāo)準(zhǔn)有關(guān),還與軟件開發(fā)環(huán)境以及開發(fā)工具與Java輸出程序的字符編碼設(shè)置不一致有關(guān)。針對(duì)不同情況下發(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í)與技術(shù),2014(29):68846888.

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

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

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

主站蜘蛛池模板: 先锋资源久久| 91麻豆国产视频| 成人精品视频一区二区在线| 91探花在线观看国产最新| 亚洲视频在线青青| 99久久精品国产综合婷婷| 91精品国产一区自在线拍| 丁香亚洲综合五月天婷婷| 日本91视频| 国产精品无码影视久久久久久久| 乱人伦视频中文字幕在线| 在线观看国产网址你懂的| 国产免费网址| 国产人碰人摸人爱免费视频| 成人毛片在线播放| 伊人色婷婷| 毛片免费视频| 国产97色在线| 成人精品午夜福利在线播放| 欧美在线综合视频| 欧美性猛交一区二区三区| 成人国产精品视频频| 欧美A级V片在线观看| 青青青亚洲精品国产| 亚洲av无码久久无遮挡| 午夜电影在线观看国产1区| 在线精品亚洲一区二区古装| 久久精品人妻中文视频| 国产日本视频91| 亚洲一欧洲中文字幕在线| 国产成人一区二区| 精品欧美一区二区三区在线| 影音先锋丝袜制服| 自偷自拍三级全三级视频| 国产超碰一区二区三区| 成人小视频网| 亚洲大尺度在线| 亚洲色图欧美激情| 99精品免费在线| 久久精品免费国产大片| 国产黄色爱视频| 国产午夜在线观看视频| 国产第一色| 精品国产女同疯狂摩擦2| 国产男人的天堂| 国产91丝袜在线观看| 成人午夜视频在线| 国产欧美日韩专区发布| 幺女国产一级毛片| 青青久在线视频免费观看| 国产真实自在自线免费精品| 99精品福利视频| 日本三级黄在线观看| 国产精品丝袜在线| 国产美女无遮挡免费视频| 亚洲欧美日韩视频一区| 精品无码人妻一区二区| 毛片手机在线看| 99999久久久久久亚洲| 亚洲男人的天堂在线| 国产极品嫩模在线观看91| 国产黄色免费看| 亚洲久悠悠色悠在线播放| 全色黄大色大片免费久久老太| 日本免费a视频| 国产青榴视频| 成人在线第一页| 毛片基地美国正在播放亚洲 | 狠狠色成人综合首页| 国产免费高清无需播放器| 亚洲精品无码专区在线观看| 亚洲不卡网| 欧美人与牲动交a欧美精品| 国产精品无码久久久久AV| 国产一级一级毛片永久| 嫩草影院在线观看精品视频| 中文字幕日韩视频欧美一区| 国产女人在线观看| 伊人无码视屏| 亚洲综合激情另类专区| 成人毛片免费在线观看| 婷婷色狠狠干|