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

?

Java Web項目開發(fā)中的中文亂碼問題與對策

2020-05-21 05:54張彥芳
電腦知識與技術(shù) 2020年9期
關(guān)鍵詞:解碼編碼

張彥芳

摘要:在當下的網(wǎng)絡(luò)時代,Java Web技術(shù)發(fā)展迅速,已經(jīng)成為市場上主流的web開發(fā)技術(shù)之一,為越來越多的web應(yīng)用開發(fā)人員所使用。但是,在進行Java Web項目開發(fā)時,經(jīng)常出現(xiàn)的中文亂碼問題給應(yīng)用開發(fā)帶來了不少的麻煩。該文具體分析了Java Web項目開發(fā)中常見的中文亂碼問題,并給出了相應(yīng)的對策。

關(guān)鍵詞:中文亂碼;編碼;解碼;Servlet

中圖分類號:TP311 文獻標識碼:A

文章編號:1009-3044(2020)09-0096-02

1 引言

目前,網(wǎng)絡(luò)高速發(fā)展,web開發(fā)應(yīng)用非常廣泛,Java Web成為市場上非常流行的web開發(fā)技術(shù)之一,越來越多的人開始學習并使用Java web開發(fā)項目。但是,我們在使用Java web技術(shù)開發(fā)項目時不可避免用到中文,在Java web中使用中文經(jīng)常會出現(xiàn)中文亂碼問題,嚴重影響了項目的開發(fā)與應(yīng)用,解決中文亂碼問題迫不及待。本文具體分析了實際應(yīng)用中遇到的中文亂碼問題,并給出了相應(yīng)的對策。

2 產(chǎn)生中文亂碼的原因

計算機中存儲數(shù)據(jù)都是以二進制的形式存儲。當我們輸入中文字符時,需要把中文字符轉(zhuǎn)換成二進制進行存儲,這時就會發(fā)生字符和字節(jié)之間的轉(zhuǎn)換。將字符轉(zhuǎn)換成字節(jié)的過程,我們稱為編碼,將字節(jié)轉(zhuǎn)換成字符的過程稱為解碼。無論是編碼還是解碼,字符與字節(jié)之間的轉(zhuǎn)換都是通過查碼表來完成的,如果在解碼時采用的碼表和編碼時采用的碼表不一致,就會產(chǎn)生亂碼的問題。

3 Java Web中常見的中文亂碼問題與對策

3.1訪問JSP頁面時出現(xiàn)中文亂碼

通過瀏覽器訪問JSP頁面時,經(jīng)常會在瀏覽器中看到亂碼,出現(xiàn)亂碼的根本原因是使用的編碼不支持中文。在JSP頁面中使用的編碼默認為“IS0-8859-1”,這種編碼方式不兼容中文字符。常用的支持中文字符的編碼有GB2312,GBK和UTF-8。我們可以在JSP文件的page指令中將編碼修改為支持中文的編碼即可。例如:< %@page pageEncoding=”UTF-8”%>.

這種方式,每次新建JSP文件時,都要在page指令中設(shè)置編碼,比較麻煩。如果使用的是Eclipse軟件開發(fā)java Web項目的話,可以直接修改JSP頁面的默認編碼為UTF-8。方法為:在Windows菜單下選擇preferences,在其級聯(lián)菜單下選擇Web,并在web的子菜單JSP Files中謾置Encoding為UTF-8,這樣設(shè)置后,再新建JSP文件,文件默認的編碼就變?yōu)閁TF-8了。

3.2 中文輸出亂碼問題

在Servlet中輸人中文字符時,如果在瀏覽器頁面看到的內(nèi)容是若干個“?”,就說明產(chǎn)生了中文亂碼。那么,這個亂碼是如何產(chǎn)生的呢?當我們使用response對象的輸出流進行編碼時,采用的是IS0-8859-1的字符碼表,這個字符表是不支持中文的,這時在IS0-8859-1字符碼表中就查不到中文字符對應(yīng)的碼,當查不到的時候就會給這些中文字符統(tǒng)一編碼為對應(yīng)個數(shù)的“63”。瀏覽器接收到數(shù)據(jù)后進行解碼,瀏覽器解碼時會采用默認的支持中文字符的字符碼表GB2312,在GB2312字符表中,“63”對應(yīng)的字符是“?”,將“63”解碼為“?”,就產(chǎn)生了亂碼。具體分析過程見圖1。

解決這種輸出亂碼問題有兩種方法:一是可以使用HttpServletResponse接口提供的setCharacterEncoding0方法,設(shè)置字符的編碼方式。我們知道UTF-8字符集支持中文,我們通過代碼設(shè)置字符的編碼方式為字符碼表UTF-8,在瀏覽器中設(shè)置瀏覽器的編碼方式也為UTF-8,這樣就能解決這個中文亂碼問題。二是不管編碼還是解碼方式都使用HttpServletResponse對象提供的方法來設(shè)置。我們通過response.setCharactorEncod-ing(“UTF-8”);i置編碼使用UTF-8字符碼表。通過使用

response. setHeader(“Content-Type”,“text/html; charset=UTF-8”);設(shè)置瀏覽器使用UTF-8字符表進行解碼,編碼解碼使用的碼表一致了,就不會出現(xiàn)中文亂碼問題。這兩條語句的功能還可以通過一句代碼來實現(xiàn),即response.setContentTypef“text/html;charset=utf-8”1:

3.3 請求參數(shù)的中文亂碼問題

在實際項目開發(fā)中,用戶的信息常常經(jīng)由表單來提交,用戶在填寫表單時,不可避免地要填寫中文信息。當提交這些用戶信息時,瀏覽器會傳遞這些表單信息。而瀏覽器在傳遞請求參數(shù)時,采用的編碼是UTF-8,但是在解碼的時候使用的是默認的字符集IS0-8859-1,這樣就導致了亂碼問題的出現(xiàn)。為了避免中文亂碼的出現(xiàn),可以通過HttpServletRequest接口提供的setCharacterEncoding0方法設(shè)置request對象的解碼方式為UTF-8,使解碼的字符集和編碼的字符集一致。

3.4 中文文件下載出現(xiàn)的中文亂碼問題

在web項目開發(fā)中,常常需要實現(xiàn)文件的上傳與下載功能,比如圖片的上傳與下載、郵箱中附件的上傳與下載等。在下載文件時,文件的名字如果是中文的,就需要在程序中對中文亂碼進行處理。如果不處理,通過瀏覽器下載文件時,要下載的文件名稱就顯示不出來。Servlet API中定義了一個URLEncoder類。我們通過這個類中定義的encoding0方法,可以將文件路徑中的字符串以指定的編碼進行輸出。經(jīng)過URL編碼后,HTTP消息頭中的數(shù)據(jù)轉(zhuǎn)換成通用的符號,在下載文件時就不會出現(xiàn)亂碼問題了。

4 使用過濾器對全站實現(xiàn)統(tǒng)一編碼,解決中文亂碼問題

在以上所述的解決中文亂碼問題的方法中,大部分都是在Servlet中設(shè)置編碼方式,這種方式也是很有效的。但是,在實際web開發(fā)中,會出現(xiàn)很多Servlet,每個Servlet中都進行編碼的設(shè)置,會重復(fù)書寫大量的代碼,給開發(fā)工作帶來麻煩。為了解決這個問題,我們可以在過濾器中對獲取到的請求和響應(yīng)消息進行編碼,將全網(wǎng)站使用的編碼統(tǒng)一,從而解決中文亂碼問題。使用過濾器可以極大地提高控制效果,同時也降低了開發(fā)成本,提高了工作效率。使用過濾器處理中文亂碼時,根據(jù)請求方式的不同,處理亂碼的方式也不同。

4.1 POST方式

用戶請求時,如果采用的請求方式是POST,那么請求參數(shù)會存放在消息體中,可以使用setCharactorEncoding0進行編碼設(shè)置,這個方法只對消息體有效。

4.2 GET方式

如果用戶請求使用的方式是GET,這種請求方式,請求參數(shù)是存放在消息頭中的,不能直接使用setCharactorEncoding0進行編碼設(shè)置。需要通過獲取URI參數(shù)進行設(shè)置。但是每次遇到GET請求方式時,都需要單獨進行處理,會很麻煩。為此,可以先定義一個HttpServletRequestWrapper類的子類,在子類中對getParameter0方法重寫,從而獲取請求參數(shù),再對請求參數(shù)進行編碼設(shè)置,從而解決中文亂碼問題。

public String getParameter(String name){

Stringstr= super.getParameter(name);

if (str== nuID

return null;

String method= super.getMethod0;

if(”get”.equals(method》{

try{

str= new String(str.getBytes(”iso-8859-1”),”utf-8”);

) catch (Exception e){

throw new RuntimeException(e);

Retum str;

5 結(jié)束語

Java Web技術(shù)是在計算機領(lǐng)域發(fā)展人員的必備利器之一,在使用Java Web技術(shù)開發(fā)項目時,開發(fā)人員會遇到各種各樣的中文亂碼問題,通過對具體問題的具體分析,找到切實有效的方法去解決,才能保障項目開發(fā)能夠順利完成。

參考文獻:

[1]劉長生,謝強,丁秋林.Java應(yīng)用中的漢字亂碼問題分析[J].計算機技術(shù)與發(fā)展,2006,16(1):158-161.

[2]王衛(wèi),李天琦,湯偉,等.基于JSP技術(shù)項目開發(fā)中中文亂碼問題研究[Jl.電腦編程技巧與維護,2018(8):38-39,61.

[3]任平紅,陳矗,鄭秋梅.Java中文亂碼問題研究[J].計算機技術(shù)與發(fā)展,2013,23(3):117-120.

[4]劉冰.Java編程中中文問題的產(chǎn)生及其解決方案[Jl.現(xiàn)代計算機:專業(yè)版,2010(3):105-107,116.

[5]賈曉芳,沈澤剛.Java Web應(yīng)用開發(fā)中的常見亂碼形式及解決方法[Jl.軟件導刊,2017,16(4):214-216.

【通聯(lián)編輯:代影】

猜你喜歡
解碼編碼
編碼中心(一)
中國編碼APP
《解碼萬噸站》
《解碼萬噸站》
《解碼萬噸站》
基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達圖像配準
《全元詩》未編碼疑難字考辨十五則
子帶編碼在圖像壓縮編碼中的應(yīng)用
解碼eUCP2.0
NAD C368解碼/放大器一體機