周兵
摘要:在進行Java Web開發(fā)的過程中,由于采用的編碼和解碼的方式不統(tǒng)一,經(jīng)常會出現(xiàn)亂碼問題。文中首先介紹了Java Web的編碼機制及JSP運行原理,繼而闡述了在開發(fā)過程中常見的亂碼問題及解決方案,最后提出采用過濾器重寫getParameter方法,實現(xiàn)了對采用get方式、post方式和URL提交數(shù)據(jù)的統(tǒng)一解決方案,從而使開發(fā)人員更方便的解決亂碼問題。
關鍵詞:字符編碼;中文亂碼; Java Web;過濾器
中圖分類號:TP31 文獻標識碼:A 文章編號:1009-3044(2014)29-6884-05
Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.
Key words: character encoding; Chinese characters; Java Web; filte
Java Web是利用Java技術(shù)來解決相關Web互聯(lián)網(wǎng)領域的技術(shù)。在進行Java Web應用程序開發(fā)的過程中,經(jīng)常會遇到在頁面中本該顯示中文的地方卻顯示的是亂碼,究其原因主要是組件與組件之間、組件與瀏覽器之間、組件與數(shù)據(jù)庫之間等采用的編碼方式不統(tǒng)一。在應用程序運行的過程中,只要涉及到中文的地方往往要進行多次字符編碼的轉(zhuǎn)換才能正常的顯示,而在轉(zhuǎn)換的過程中只要編碼方式設置錯誤就會導致中文亂碼。該文主要從Java的常見編碼和JSP的運行原理出發(fā),詳細的介紹了在進行Java Web開發(fā)過程中的常見中文亂碼及解決方案。
1 Java中字符編碼規(guī)則
1) ISO8859-1編碼,通常也叫Latin-1或西歐語言,屬于單字節(jié)編碼,最多能表示的字符范圍是0~255,應用于英文系列,是Java網(wǎng)絡傳輸使用的標準字符集。
2) GB2312/GBK編碼是中國國家標準漢字信息交換編碼,專門用來表示漢字,GBK是對GB2312的擴充,采用雙字節(jié)編碼,可以同時兼容繁體字和簡體字,而GB2312只能表示簡體字,GBK是兼容GB2312編碼的。
3) Unicode編碼,可以用來表示所有語言的字符,屬于最統(tǒng)一的編碼[8]。使用的是定長的雙字節(jié)或四字節(jié)進行的編碼,為每個字符設定唯一的二進制編碼。但該編碼不兼容ISO8859-1編碼,也不兼容任何編碼。Unicode編碼可以滿足跨語言、跨平臺進行文本轉(zhuǎn)換及處理的要求,又稱為萬國碼。
4) UTF-8編碼[1],
當操作系統(tǒng)是簡體中文時,默認的編碼都是采用GBK,編譯時采用GBK編碼方式讀取轉(zhuǎn)化成Unicode,再轉(zhuǎn)換成UTF-8寫入到Class文件中。此文件在原來系統(tǒng)中訪問不會出現(xiàn)中文亂碼問題,但當該文件移植到英文系統(tǒng)中后,此時就會出現(xiàn)中文亂碼問題。原因是Java采用UTF-8讀取Class文件,再將Class文件轉(zhuǎn)換成Unicode,但此時無法采用系統(tǒng)默認編碼ISO8859-1對編碼進行解碼。同理,如果把在英文操作系統(tǒng)下編譯的文件移植到中文系統(tǒng)下去訪問,也會出現(xiàn)中文亂碼問題。通過源文件的編譯和反編譯可以發(fā)現(xiàn),在編碼轉(zhuǎn)換的過程中,都是通過Unicode編碼作為中介來完成的,此時造成亂碼的根本原因是使用錯誤的字符集解碼字節(jié)流或者將給定的字節(jié)流用錯誤的字符集解碼。
3 JSP運行原理
3.1 JSP運行過程
當客戶端向服務器發(fā)出JSP請求時,服務器接收到請求后就將請求交個應用服務器,此時應用服務器就創(chuàng)建request和response對象并判斷JSP對象是否存在,如果不存在再判斷該JSP文件是否存在,如果不存在就產(chǎn)生404錯誤,如果請求的文件存在,此時就將JSP文件轉(zhuǎn)換成Java文件并編譯Java文件,加載類、實例化、初始化,將request和response作為參數(shù)傳遞個service()方法,該方法執(zhí)行結(jié)果是HTML代碼,service執(zhí)行完畢后就刪除request、response,應用服務器將結(jié)果返回給Web服務器,Web服務器把結(jié)果返回給瀏覽器,瀏覽器進行解析顯示;如果請求的對象存在,就直接將request和response作為參數(shù)傳遞個service方法,繼續(xù)向下執(zhí)行,其運行過程如圖2所示:
6 結(jié)束語
在進行Java web開發(fā)的過程中,在JSP頁面中只要將charset、pageEncoding、過濾器中的編碼都設置一致并支持中文編碼, 此時無論以何種提交方式,都可以解決中文亂碼問題,從而提高了開發(fā)效率,降低了程序亂碼的出現(xiàn)概率。
參考文獻:
[1] 楊金花.JSP技術(shù)中文亂碼的原因及解決方法[J].電子設計工程,2011,19(1):25-27.
[2] 張言輝.J2EE平臺下漢字亂碼問題分析及解決[J].電腦知識與技術(shù),2010,6(12):3019-3021.
[3] 李響,郝靜靜.Java Web開發(fā)中文亂碼問題的研究與解決[J].電腦知識與技術(shù),2012,8(1):62-63.
[4] 仁平紅.Java中文亂碼問題研究[J].計算機技術(shù)與發(fā)展,2013,23(3):118-120.
[5] 彭立.Tomcat環(huán)境下JSP中文亂碼問題的解決[J].湖南第一師范學院學報,2011,11(3):128-132.
[6] 楊玉婷,康厚良.Web應用程序開發(fā)中的中文亂碼問題討論[J].重慶三峽學院學報,2011,27(3):60-64.
[7] 李德平.對Java Web應用開發(fā)中的中文亂碼問題的研究與解決[J].計算機與數(shù)字工程,2012,278(12):126-129.
[8] 宋麗娜.基于JSP的Web開發(fā)中文亂碼問題的研究與解決[J].電子技術(shù),2013,11(2):5-7.
[9] 習勝豐,戴敏.Java Web中文亂碼處理研究[J].湖南城市學院學報,2010,9(19):66-68.
[10] 錢程.淺析JSP網(wǎng)站開發(fā)中中文亂碼問題[J].科技信息,2009,1(33):65.endprint
摘要:在進行Java Web開發(fā)的過程中,由于采用的編碼和解碼的方式不統(tǒng)一,經(jīng)常會出現(xiàn)亂碼問題。文中首先介紹了Java Web的編碼機制及JSP運行原理,繼而闡述了在開發(fā)過程中常見的亂碼問題及解決方案,最后提出采用過濾器重寫getParameter方法,實現(xiàn)了對采用get方式、post方式和URL提交數(shù)據(jù)的統(tǒng)一解決方案,從而使開發(fā)人員更方便的解決亂碼問題。
關鍵詞:字符編碼;中文亂碼; Java Web;過濾器
中圖分類號:TP31 文獻標識碼:A 文章編號:1009-3044(2014)29-6884-05
Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.
Key words: character encoding; Chinese characters; Java Web; filte
Java Web是利用Java技術(shù)來解決相關Web互聯(lián)網(wǎng)領域的技術(shù)。在進行Java Web應用程序開發(fā)的過程中,經(jīng)常會遇到在頁面中本該顯示中文的地方卻顯示的是亂碼,究其原因主要是組件與組件之間、組件與瀏覽器之間、組件與數(shù)據(jù)庫之間等采用的編碼方式不統(tǒng)一。在應用程序運行的過程中,只要涉及到中文的地方往往要進行多次字符編碼的轉(zhuǎn)換才能正常的顯示,而在轉(zhuǎn)換的過程中只要編碼方式設置錯誤就會導致中文亂碼。該文主要從Java的常見編碼和JSP的運行原理出發(fā),詳細的介紹了在進行Java Web開發(fā)過程中的常見中文亂碼及解決方案。
1 Java中字符編碼規(guī)則
1) ISO8859-1編碼,通常也叫Latin-1或西歐語言,屬于單字節(jié)編碼,最多能表示的字符范圍是0~255,應用于英文系列,是Java網(wǎng)絡傳輸使用的標準字符集。
2) GB2312/GBK編碼是中國國家標準漢字信息交換編碼,專門用來表示漢字,GBK是對GB2312的擴充,采用雙字節(jié)編碼,可以同時兼容繁體字和簡體字,而GB2312只能表示簡體字,GBK是兼容GB2312編碼的。
3) Unicode編碼,可以用來表示所有語言的字符,屬于最統(tǒng)一的編碼[8]。使用的是定長的雙字節(jié)或四字節(jié)進行的編碼,為每個字符設定唯一的二進制編碼。但該編碼不兼容ISO8859-1編碼,也不兼容任何編碼。Unicode編碼可以滿足跨語言、跨平臺進行文本轉(zhuǎn)換及處理的要求,又稱為萬國碼。
4) UTF-8編碼[1],
當操作系統(tǒng)是簡體中文時,默認的編碼都是采用GBK,編譯時采用GBK編碼方式讀取轉(zhuǎn)化成Unicode,再轉(zhuǎn)換成UTF-8寫入到Class文件中。此文件在原來系統(tǒng)中訪問不會出現(xiàn)中文亂碼問題,但當該文件移植到英文系統(tǒng)中后,此時就會出現(xiàn)中文亂碼問題。原因是Java采用UTF-8讀取Class文件,再將Class文件轉(zhuǎn)換成Unicode,但此時無法采用系統(tǒng)默認編碼ISO8859-1對編碼進行解碼。同理,如果把在英文操作系統(tǒng)下編譯的文件移植到中文系統(tǒng)下去訪問,也會出現(xiàn)中文亂碼問題。通過源文件的編譯和反編譯可以發(fā)現(xiàn),在編碼轉(zhuǎn)換的過程中,都是通過Unicode編碼作為中介來完成的,此時造成亂碼的根本原因是使用錯誤的字符集解碼字節(jié)流或者將給定的字節(jié)流用錯誤的字符集解碼。
3 JSP運行原理
3.1 JSP運行過程
當客戶端向服務器發(fā)出JSP請求時,服務器接收到請求后就將請求交個應用服務器,此時應用服務器就創(chuàng)建request和response對象并判斷JSP對象是否存在,如果不存在再判斷該JSP文件是否存在,如果不存在就產(chǎn)生404錯誤,如果請求的文件存在,此時就將JSP文件轉(zhuǎn)換成Java文件并編譯Java文件,加載類、實例化、初始化,將request和response作為參數(shù)傳遞個service()方法,該方法執(zhí)行結(jié)果是HTML代碼,service執(zhí)行完畢后就刪除request、response,應用服務器將結(jié)果返回給Web服務器,Web服務器把結(jié)果返回給瀏覽器,瀏覽器進行解析顯示;如果請求的對象存在,就直接將request和response作為參數(shù)傳遞個service方法,繼續(xù)向下執(zhí)行,其運行過程如圖2所示:
6 結(jié)束語
在進行Java web開發(fā)的過程中,在JSP頁面中只要將charset、pageEncoding、過濾器中的編碼都設置一致并支持中文編碼, 此時無論以何種提交方式,都可以解決中文亂碼問題,從而提高了開發(fā)效率,降低了程序亂碼的出現(xiàn)概率。
參考文獻:
[1] 楊金花.JSP技術(shù)中文亂碼的原因及解決方法[J].電子設計工程,2011,19(1):25-27.
[2] 張言輝.J2EE平臺下漢字亂碼問題分析及解決[J].電腦知識與技術(shù),2010,6(12):3019-3021.
[3] 李響,郝靜靜.Java Web開發(fā)中文亂碼問題的研究與解決[J].電腦知識與技術(shù),2012,8(1):62-63.
[4] 仁平紅.Java中文亂碼問題研究[J].計算機技術(shù)與發(fā)展,2013,23(3):118-120.
[5] 彭立.Tomcat環(huán)境下JSP中文亂碼問題的解決[J].湖南第一師范學院學報,2011,11(3):128-132.
[6] 楊玉婷,康厚良.Web應用程序開發(fā)中的中文亂碼問題討論[J].重慶三峽學院學報,2011,27(3):60-64.
[7] 李德平.對Java Web應用開發(fā)中的中文亂碼問題的研究與解決[J].計算機與數(shù)字工程,2012,278(12):126-129.
[8] 宋麗娜.基于JSP的Web開發(fā)中文亂碼問題的研究與解決[J].電子技術(shù),2013,11(2):5-7.
[9] 習勝豐,戴敏.Java Web中文亂碼處理研究[J].湖南城市學院學報,2010,9(19):66-68.
[10] 錢程.淺析JSP網(wǎng)站開發(fā)中中文亂碼問題[J].科技信息,2009,1(33):65.endprint
摘要:在進行Java Web開發(fā)的過程中,由于采用的編碼和解碼的方式不統(tǒng)一,經(jīng)常會出現(xiàn)亂碼問題。文中首先介紹了Java Web的編碼機制及JSP運行原理,繼而闡述了在開發(fā)過程中常見的亂碼問題及解決方案,最后提出采用過濾器重寫getParameter方法,實現(xiàn)了對采用get方式、post方式和URL提交數(shù)據(jù)的統(tǒng)一解決方案,從而使開發(fā)人員更方便的解決亂碼問題。
關鍵詞:字符編碼;中文亂碼; Java Web;過濾器
中圖分類號:TP31 文獻標識碼:A 文章編號:1009-3044(2014)29-6884-05
Abstract: During the process of Java Web development, as a result of the encoding and decoding methods are not unified, often appear problem. This paper first introduces the encoding scheme and JSP operation principle of Java Web, and then the problem is common in the development process and the solution, and finally puts forward the filter overrides the getParameter method to realize the get mode, post mode and URL submit data integration solutions, so as to enable developers to more easily to solve the problem.
Key words: character encoding; Chinese characters; Java Web; filte
Java Web是利用Java技術(shù)來解決相關Web互聯(lián)網(wǎng)領域的技術(shù)。在進行Java Web應用程序開發(fā)的過程中,經(jīng)常會遇到在頁面中本該顯示中文的地方卻顯示的是亂碼,究其原因主要是組件與組件之間、組件與瀏覽器之間、組件與數(shù)據(jù)庫之間等采用的編碼方式不統(tǒng)一。在應用程序運行的過程中,只要涉及到中文的地方往往要進行多次字符編碼的轉(zhuǎn)換才能正常的顯示,而在轉(zhuǎn)換的過程中只要編碼方式設置錯誤就會導致中文亂碼。該文主要從Java的常見編碼和JSP的運行原理出發(fā),詳細的介紹了在進行Java Web開發(fā)過程中的常見中文亂碼及解決方案。
1 Java中字符編碼規(guī)則
1) ISO8859-1編碼,通常也叫Latin-1或西歐語言,屬于單字節(jié)編碼,最多能表示的字符范圍是0~255,應用于英文系列,是Java網(wǎng)絡傳輸使用的標準字符集。
2) GB2312/GBK編碼是中國國家標準漢字信息交換編碼,專門用來表示漢字,GBK是對GB2312的擴充,采用雙字節(jié)編碼,可以同時兼容繁體字和簡體字,而GB2312只能表示簡體字,GBK是兼容GB2312編碼的。
3) Unicode編碼,可以用來表示所有語言的字符,屬于最統(tǒng)一的編碼[8]。使用的是定長的雙字節(jié)或四字節(jié)進行的編碼,為每個字符設定唯一的二進制編碼。但該編碼不兼容ISO8859-1編碼,也不兼容任何編碼。Unicode編碼可以滿足跨語言、跨平臺進行文本轉(zhuǎn)換及處理的要求,又稱為萬國碼。
4) UTF-8編碼[1],
當操作系統(tǒng)是簡體中文時,默認的編碼都是采用GBK,編譯時采用GBK編碼方式讀取轉(zhuǎn)化成Unicode,再轉(zhuǎn)換成UTF-8寫入到Class文件中。此文件在原來系統(tǒng)中訪問不會出現(xiàn)中文亂碼問題,但當該文件移植到英文系統(tǒng)中后,此時就會出現(xiàn)中文亂碼問題。原因是Java采用UTF-8讀取Class文件,再將Class文件轉(zhuǎn)換成Unicode,但此時無法采用系統(tǒng)默認編碼ISO8859-1對編碼進行解碼。同理,如果把在英文操作系統(tǒng)下編譯的文件移植到中文系統(tǒng)下去訪問,也會出現(xiàn)中文亂碼問題。通過源文件的編譯和反編譯可以發(fā)現(xiàn),在編碼轉(zhuǎn)換的過程中,都是通過Unicode編碼作為中介來完成的,此時造成亂碼的根本原因是使用錯誤的字符集解碼字節(jié)流或者將給定的字節(jié)流用錯誤的字符集解碼。
3 JSP運行原理
3.1 JSP運行過程
當客戶端向服務器發(fā)出JSP請求時,服務器接收到請求后就將請求交個應用服務器,此時應用服務器就創(chuàng)建request和response對象并判斷JSP對象是否存在,如果不存在再判斷該JSP文件是否存在,如果不存在就產(chǎn)生404錯誤,如果請求的文件存在,此時就將JSP文件轉(zhuǎn)換成Java文件并編譯Java文件,加載類、實例化、初始化,將request和response作為參數(shù)傳遞個service()方法,該方法執(zhí)行結(jié)果是HTML代碼,service執(zhí)行完畢后就刪除request、response,應用服務器將結(jié)果返回給Web服務器,Web服務器把結(jié)果返回給瀏覽器,瀏覽器進行解析顯示;如果請求的對象存在,就直接將request和response作為參數(shù)傳遞個service方法,繼續(xù)向下執(zhí)行,其運行過程如圖2所示:
6 結(jié)束語
在進行Java web開發(fā)的過程中,在JSP頁面中只要將charset、pageEncoding、過濾器中的編碼都設置一致并支持中文編碼, 此時無論以何種提交方式,都可以解決中文亂碼問題,從而提高了開發(fā)效率,降低了程序亂碼的出現(xiàn)概率。
參考文獻:
[1] 楊金花.JSP技術(shù)中文亂碼的原因及解決方法[J].電子設計工程,2011,19(1):25-27.
[2] 張言輝.J2EE平臺下漢字亂碼問題分析及解決[J].電腦知識與技術(shù),2010,6(12):3019-3021.
[3] 李響,郝靜靜.Java Web開發(fā)中文亂碼問題的研究與解決[J].電腦知識與技術(shù),2012,8(1):62-63.
[4] 仁平紅.Java中文亂碼問題研究[J].計算機技術(shù)與發(fā)展,2013,23(3):118-120.
[5] 彭立.Tomcat環(huán)境下JSP中文亂碼問題的解決[J].湖南第一師范學院學報,2011,11(3):128-132.
[6] 楊玉婷,康厚良.Web應用程序開發(fā)中的中文亂碼問題討論[J].重慶三峽學院學報,2011,27(3):60-64.
[7] 李德平.對Java Web應用開發(fā)中的中文亂碼問題的研究與解決[J].計算機與數(shù)字工程,2012,278(12):126-129.
[8] 宋麗娜.基于JSP的Web開發(fā)中文亂碼問題的研究與解決[J].電子技術(shù),2013,11(2):5-7.
[9] 習勝豐,戴敏.Java Web中文亂碼處理研究[J].湖南城市學院學報,2010,9(19):66-68.
[10] 錢程.淺析JSP網(wǎng)站開發(fā)中中文亂碼問題[J].科技信息,2009,1(33):65.endprint