張仁美
(貴州輕工職業(yè)技術(shù)學(xué)院 貴州省貴陽(yáng)市 550025)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,為人類文明創(chuàng)新發(fā)展提供了推動(dòng)力,人們之間的距離也明顯縮小,借助微信或MSN 等手機(jī)APP 社交軟件人們就可隨時(shí)隨地進(jìn)行交流。當(dāng)前,互聯(lián)網(wǎng)技術(shù)發(fā)展水平不斷提高并廣泛應(yīng)用于日常生活與工作中,確保人們足不出戶就可知曉天下事。與此同時(shí)移動(dòng)支付、網(wǎng)購(gòu)等逐漸發(fā)展成為我國(guó)新四大發(fā)明,日常生活與工作更加便利。互聯(lián)網(wǎng)行業(yè)快速發(fā)展的同時(shí),各行業(yè)應(yīng)用網(wǎng)絡(luò)信息資源構(gòu)建信息安全機(jī)制保障網(wǎng)絡(luò)環(huán)境的安全與綠色性是十分必要的。在Web 開發(fā)中加強(qiáng)各類技術(shù)優(yōu)化,以此推動(dòng)網(wǎng)絡(luò)信息可持續(xù)發(fā)展。
不同語(yǔ)言平臺(tái)中,為了確保Java Web 程序運(yùn)行更加穩(wěn)定,統(tǒng)一采用Unicode 字符集表示其內(nèi)部語(yǔ)言。Web 開發(fā)中,其源程序要求先應(yīng)用默認(rèn)操作系統(tǒng)編碼方法轉(zhuǎn)碼操作,借助I/O 操作取得對(duì)應(yīng)編碼字節(jié)流,最后在Class 文件中輸入轉(zhuǎn)換后的UTF-8 字符編碼。
文件操作如果屬于簡(jiǎn)體中文格式,GBK 就成為默認(rèn)編碼格式,開發(fā)工作中GBK 轉(zhuǎn)換成Unicode 的方法,最后在Class 文件中輸入最終UTF-8 字符編碼。要注意此過(guò)程中原系統(tǒng)不會(huì)發(fā)生亂碼問(wèn)題,假若在英文系統(tǒng)中移入該編碼,就會(huì)加大中文亂碼問(wèn)題的發(fā)生幾率,這主要是因Java 借助UTF-8 字符集讀取Class 文件內(nèi)容,并最終轉(zhuǎn)換為Unicode 編碼方式。實(shí)際轉(zhuǎn)換過(guò)程中,以Unicode 編碼為中介完成操作,此種情況下出現(xiàn)亂碼主要是因字符解碼字節(jié)流不正確或給出的字節(jié)流用所選字符集解碼存在偏差。
(1)ISO8859-1 編碼方式。通常也被看作是Latin-1 亦或是西歐語(yǔ)言,屬于單字節(jié)編碼方式的一種,其可表示的所有字符在0-255個(gè),因而英文狀態(tài)編程下有很強(qiáng)的適用性。Java 網(wǎng)絡(luò)傳輸為標(biāo)準(zhǔn)字符集的形成創(chuàng)造了條件。其能夠兼容ASCII 編碼,表示256 個(gè)字符但對(duì)中文編碼卻是不支持的。
(2)GB2312/GBK 編碼。國(guó)家標(biāo)準(zhǔn)編碼內(nèi)容中,漢字信息交換法編碼是重要構(gòu)成,只可用于表示漢字。該編碼流程中,GBK編碼有效擴(kuò)充了雙字節(jié)形式的編碼內(nèi)涵,對(duì)簡(jiǎn)體與繁體字有明顯的兼容性,而GB2312 只能對(duì)簡(jiǎn)體字進(jìn)行表示,但GBK 卻對(duì)此種編碼形式有一定的兼容性。作為一種中文字符簡(jiǎn)體中文雙字節(jié)編碼方式,涵蓋的漢字總量達(dá)到了6763 個(gè)。對(duì)于GB2312 編碼方式而言,GBK 屬于一種擴(kuò)展模式,兼容性比較強(qiáng)。
(3)Unicode 編碼方式,其代表著全部語(yǔ)言字符,對(duì)編碼操作有明顯統(tǒng)一性。通過(guò)定長(zhǎng)雙或者四字節(jié)方式進(jìn)行編碼流程開發(fā),還要為每一字符設(shè)置唯一相對(duì)應(yīng)的二進(jìn)制編碼。對(duì)于ISO8859-1 編碼方法,該編碼形式是不兼容的,其它任何編碼也不能兼容。該編碼能夠?qū)崿F(xiàn)跨語(yǔ)言與平臺(tái)的文本轉(zhuǎn)換與處理要求,因而也稱為萬(wàn)國(guó)碼。Unicode 編碼是在ASCII 字元集擴(kuò)展基礎(chǔ)上產(chǎn)生中,其應(yīng)用全16 位元字元集,可用于表示所有語(yǔ)言字符,利于統(tǒng)一進(jìn)行編碼。
(4)UTF-8 編碼。該方式對(duì) ISO8859-1 與Unicode 形式的編碼有一定的兼容性,還能對(duì)全部語(yǔ)言字符進(jìn)行表示。定長(zhǎng)編碼方法中該編碼不包含在內(nèi),每一字符為1-6 個(gè)長(zhǎng)度不同的字符。另外,該編碼方法自身還能夠發(fā)揮校驗(yàn)作用,一個(gè)字節(jié)就可表示一個(gè)英文字符,而漢字則至少需要3 個(gè)字節(jié)才能完全表示出來(lái)。
Java Web 開發(fā)中,字符編碼轉(zhuǎn)換是十分必要的。計(jì)算機(jī)設(shè)備只能對(duì)二進(jìn)制數(shù)做出識(shí)別,日常程序開發(fā)中,會(huì)用到很多的字母、阿拉伯?dāng)?shù)字及漢字等,要注意通過(guò)二進(jìn)制方法在電腦上存儲(chǔ)字符編碼。Web 開發(fā)中,計(jì)算機(jī)設(shè)備處理字符分為編碼與解碼,字符儲(chǔ)存到電腦上后轉(zhuǎn)換成二進(jìn)制數(shù)位,此過(guò)程即為編碼;反之,如果電腦上二進(jìn)制編碼是用字符形式顯現(xiàn)出來(lái),這一過(guò)程即為解碼。實(shí)際開發(fā)過(guò)程中,ISO8859- 1,UTF-8,Unicode,GB2312 及GBK 等是常用編碼方式,要注意編碼方式的不同,其要合理選擇相應(yīng)的編碼規(guī)則。
Eclipse 為核心的Web 開發(fā)設(shè)計(jì)過(guò)程中,為了盡可能預(yù)防中文亂碼問(wèn)題的出現(xiàn),在jsp 頁(yè)面中做好默認(rèn)編碼的設(shè)置。此時(shí),為了保障中文顯示效果,大多數(shù)情況下會(huì)以UTF-8 設(shè)置Eclipse 編碼方式。實(shí)際工作中,可從以下幾方面入手進(jìn)行。首先,在jsp 頁(yè)面中做好編碼設(shè)置,程序語(yǔ)言為window-preferences-General Content Type -Text -Jsp,利用UTF-8 編碼有效設(shè)置Default En Coding。其次,基于Eclipse 設(shè)置環(huán)境工作編碼。Window-preferences General -workspace面板中基于UTF-8編碼加強(qiáng)Text file encoding設(shè)置。最后,jsp 文件編碼的設(shè)置,電腦程序面板中以UTF-8 加強(qiáng)Encoding 編碼設(shè)置。
Jsp 頁(yè)面訪問(wèn)時(shí),網(wǎng)頁(yè)開發(fā)過(guò)程中中文亂碼是普遍存在的一種較為復(fù)雜的亂碼問(wèn)題。編碼設(shè)置過(guò)程中,為了減小這一問(wèn)題發(fā)生幾率,一般將字符集添加到j(luò)sp 文件頂部,再借助UTF-8 形式為頁(yè)面設(shè)置相應(yīng)的編碼格式,其設(shè)置的具體代碼主要為:
另外,在服務(wù)器tomcat Web 文件配置Server.xml 中Connect 項(xiàng)中加入“URI Encoding=UTF-8”,再對(duì)tomcat 進(jìn)行重新啟動(dòng)服務(wù)。
瀏覽器會(huì)以get 與post 方式將信息傳遞給服務(wù)器,實(shí)際工作中要根據(jù)實(shí)際情況選用相應(yīng)的方式解決亂碼問(wèn)題。以get 方式提交信息時(shí),基于“?參數(shù)名1=值1&參數(shù)名2=值2…”的方式將URL 及相關(guān)參數(shù)連接起來(lái),選用ASCII 字符提交相關(guān)數(shù)據(jù)。提交表單時(shí),瀏覽器選用ISO8859-1 編碼方式向URL 中非ASCII 設(shè)計(jì)URL 編碼傳遞相關(guān)的數(shù)據(jù),服務(wù)器接收到此類數(shù)據(jù)后實(shí)施編碼。因而,get 方式提交數(shù)據(jù)過(guò)程中出現(xiàn)亂碼問(wèn)題后,業(yè)務(wù)層利用String類get Bytes 解碼手段接收信息參數(shù),而New String(request.get Parameter("name").get Bytes("ISO-8859-1"),"客戶編碼方法")是其編碼的具體語(yǔ)言形式。
在頁(yè)面查詢或者提交信息過(guò)程中,一旦URL 鏈接中有中文字符出現(xiàn),閱讀中文目錄與文件名時(shí)出現(xiàn)亂碼。這主要是因?yàn)閼?yīng)用URL 進(jìn)行參數(shù)傳遞時(shí),瀏覽器編碼環(huán)境直接決定著程序編碼,換言之UEL 中如果目錄或文件名是中文情況下,通過(guò)瀏覽器進(jìn)行參數(shù)等編碼的設(shè)置,進(jìn)而將這些編碼有效的傳遞到后臺(tái)之中。如果沒有經(jīng)過(guò)處理,就請(qǐng)求URL,如果URL 存在中文,就會(huì)引起中文亂碼問(wèn)題。研究測(cè)試發(fā)現(xiàn),鏈接編碼與解碼是有效解決這一問(wèn)題的辦法。其中編碼主要關(guān)鍵代碼是:
鏈接地址進(jìn)行解碼是,主要代碼為:
java.net.URL Decoder.decode(request.get Request URI(),"UTF-8"
對(duì)于My SQL 數(shù)據(jù)庫(kù)而言,ISO8859-1 是編碼的默認(rèn)格式,數(shù)據(jù)存取過(guò)程中為了預(yù)防中文亂碼問(wèn)題,可利用UTF-8 修改MUSQL默認(rèn)編碼格式并解決亂碼問(wèn)題。日常工作中,主要通過(guò)安裝目錄中找到my.ini 文件方式進(jìn)行。
將default-character-set=utf8引入到client、my sqld、my sql、my sql.server 及my sqld_safe 等項(xiàng)目下。此外,數(shù)據(jù)庫(kù)連接URL 中將“jdbc:my sql://local host:3306/db1?use Encode=true&character Encoding=UTF8”視為URL 連接字符串,關(guān)鍵代碼為character Encoding=utf8,表示以UTF-8 編碼字符集進(jìn)行對(duì)象連接。
中文字符輸入Servlet 中時(shí),假若瀏覽器頁(yè)面看到的內(nèi)容為很多個(gè)“?”,那么表明出現(xiàn)中文亂碼問(wèn)題。實(shí)際工作中,此類亂碼問(wèn)題是如何形成的。當(dāng)我們采用response 對(duì)象輸出流編碼過(guò)程中,選用ISO-8859-1 字符編碼表,該字符表對(duì)中文不能支持,此時(shí)ISO-8859-1 字符編碼表中就無(wú)法查詢到與中文字符相對(duì)應(yīng)的編碼。如果查不到就要這些中文字符統(tǒng)一編碼對(duì)應(yīng)個(gè)數(shù)“63”。瀏覽器接收到該數(shù)據(jù)后實(shí)施解碼,解碼過(guò)程中選用默認(rèn)支持中文字符編碼表GB2312。而在GB2312 字符編碼表中,“63”對(duì)應(yīng)字符為“?”,實(shí)際操作中將“63”解碼成“?”,就會(huì)形成亂碼1。
Web日常開發(fā)工作中,對(duì)于中文輸出亂碼問(wèn)題,可采取以下方法解決這一亂碼問(wèn)題。一方面,采用HTTP Servlet Response 接口提供的 set Character Encoding()的方法合理設(shè)置字符編碼方法。眾所周知,UTF-8 字符集只支持中文,可利用代碼設(shè)置字符編碼方式形成UTF-8 字符編碼表。瀏覽器中,以UTF-8 設(shè)置其編碼形式,為中文輸出亂碼問(wèn)題的解決創(chuàng)造條件。另一方面,編碼或解碼方式都借助HTTP Servlet Response 對(duì)象提供的方式設(shè)計(jì)。利用response.set Character Encoding(“UTF-8”)通過(guò)UTF-8 編碼字符表設(shè)置編碼方式;還要借助UTF-8 字符表設(shè)置瀏覽器解碼表,選用相同的編碼與解碼表?xiàng)l件下,就不會(huì)發(fā)生中文亂碼問(wèn)題。這兩條語(yǔ)句功能還可利用 response.set Content Type(“text/HTML;char set=utf-8”)語(yǔ)言代碼實(shí)現(xiàn)。
綜上所述,軟件對(duì)計(jì)算機(jī)系統(tǒng)而言是非常重要的,要加強(qiáng)軟件系統(tǒng)測(cè)試、設(shè)計(jì)與后期維護(hù)等方面的設(shè)計(jì),結(jié)合軟件系統(tǒng)要求構(gòu)建層次相同的模塊。隨著時(shí)代的進(jìn)步,國(guó)家科學(xué)技術(shù)水平不斷提高,所以軟件開發(fā)過(guò)程也不斷優(yōu)化與完善。研究分析相關(guān)問(wèn)題,以此深入解決軟件開發(fā)設(shè)計(jì)中出現(xiàn)的問(wèn)題,為順利進(jìn)行Web 開發(fā)奠定良好的基礎(chǔ)。