国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

賈曉芳+沈澤剛

摘要:在運用Java Web 技術(shù)開發(fā)Web應(yīng)用程序時,要根據(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編碼。該編碼本身帶有校驗功能,在網(wǎng)頁上多會出現(xiàn)關(guān)于中文簡體或者其它語言的提醒。Unicode編碼是統(tǒng)一字符編碼的標(biāo)準(zhǔn)集,是唯一的二進(jìn)制計算機字符編碼,能表示所有語言的字符,不受語言與運行平臺的限制,可以進(jìn)行跨語言、跨平臺的文本轉(zhuǎn)換操作,使用0~65 535的雙字節(jié)無符號對每一個字符進(jìn)行編碼,確保每個字符的表示方式唯一。 GB2312/GBK編碼屬于國標(biāo)碼,用來表示中文的雙字節(jié)字符編碼,其中GBK編碼表示簡體字和繁體字,完全兼容GB2312編碼,屬于GB2312編碼的擴充編碼,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系列中文字符編碼在實際中比較常用,使用這種編碼會降低亂碼出現(xiàn)機率。

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

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)換機制

為了使Java語言開發(fā)的Web應(yīng)用程序可以在各種平臺下無限制運行,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)生亂碼。

運行環(huán)境影響正常的編譯操作,操作系統(tǒng)版本不同,操作系統(tǒng)默認(rèn)編碼與所安裝的系統(tǒng)版本不一致,若將編譯好的.class文件植入一些不支持運行的操作系統(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)亂碼。可以在接收用戶提交的表單信息的JSP文件或者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配置文件,找到如下代碼,在代碼的末端加入URIEncoding=”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的實體內(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過濾器解決亂碼問題

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

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

在filter配置中,指定初始化參數(shù)字符編碼encoding的值為UTF-8,filter類中讀入該參數(shù)的值,并把resquest的字符編碼、response的字符編碼設(shè)置為encoding。過濾器處理亂碼的實現(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è)計工程,2011(1):2528.〖

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

猜你喜歡
web技術(shù)
基于物聯(lián)網(wǎng)的承壓特種設(shè)備管理系統(tǒng)設(shè)計與實現(xiàn)
基于Web的教學(xué)管理信息系統(tǒng)的開發(fā)與實踐研究