• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Java Web開發(fā)中文亂碼問題的研究與解決

      2012-04-29 02:31:34李響郝靜靜
      電腦知識與技術 2012年1期

      李響 郝靜靜

      摘要:在利用Servlet/JSP技術開發(fā)Java Web應用程序的時候,不可避免的會遇到中文亂碼問題,本文首先介紹了Web應用中常用的編碼方式,然后分析了J2EE平臺下Web應用中文亂碼問題產生的原因,并在此基礎上針對不同情況提出了解決方案。

      關鍵詞: Java Web開發(fā);中文亂碼;字符編碼

      中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)01-0062-02

      Research and Solution of Chinese Garbled in Java Web Programming

      LI Xiang,HAO Jing-jing

      (Software College of Kaifeng University, Kaifeng 475004, China)

      Abstract: In the use of Servlet/ JSP technology to develop Java Web application, will inevitably encounter the problem of Chinese characters encoding, this paper introduces the encoding mode in application of Web, and then analyses the causes of Chinese garbled on the J2EE platform Web application, and gives each case of the solution.

      Key words: Java Web developing; Chinese garbled; character encoding

      在Java Web應用開發(fā)中,經常會出現(xiàn)頁面中本該顯示中文的地方卻是亂碼的情況。究其原因,主要是由于在Web組件之間、或Web組件與瀏覽器、與數(shù)據庫所使用的字符集標準不統(tǒng)一,Web應用程序運行過程中,中文字符往往需要在不同的字符集之間來回轉換,這就導致了中文亂碼問題的頻繁出現(xiàn)。本文從Web應用的常用編碼出發(fā),詳細討論Java Web應用開發(fā)中出現(xiàn)中文亂碼的原因以及解決辦法。本文討論的環(huán)境是基于JDK5.0,服務器為Tomcat5.5,數(shù)據庫為MySQL 5.0。

      1 Web應用的常用編碼

      Web應用中常用的編碼主要有ISO8859-1,GB2312,GBK,Unicode和UTF- 8。

      1.1 ISO8859-1

      ISO8859-1,是國際標準化組織內ISO/IEC 8859的第一個8位字符集,屬于單字節(jié)編碼,最多能表示的字符范圍是0- 255,應用于英文系列。

      1.2 GB2312/ GBK

      GB2312和GBK是中華人民共和國國家標準漢字信息交換用編碼,簡稱國標碼,專門用來表示漢字,是雙字節(jié)編碼。其中GBK編碼能夠用來同時表示繁體字和簡體字,而GB2312只能表示簡體字。

      1.3 Unicode

      Unicode(統(tǒng)一的字符編碼標準集)使用2個字節(jié)對每一個字符進行編碼,是Java語言默認的字符集。

      1.4 UTF- 8

      UTF-8編碼,用1到6個字節(jié)編碼Unicode字符,用在網頁上可以在同一頁面顯示中文簡體繁體及其他語言。

      2 Web應用中的中文亂碼問題的分析

      在Web應用中,通常包括了瀏覽器、Web服務器、Web應用程序和數(shù)據庫等部分,每一部分都有可能使用不同的字符集,從而導致字符數(shù)據在各種不同的字符集之間轉換時出現(xiàn)亂碼問題。

      在弄清Web應用中的中文亂碼問題前,先明確理解Java Web開發(fā)中所用到的JSP/Servlet應用程序中的幾個有關編碼設置的方法。

      在JSP/Servlet中主要有以下幾種方式可以設置編碼("***"表示編碼方式):

      1) pageEncoding="***"

      2) contentType="text/html;charset=***

      3) request.setCharacterEncoding("***")

      4) response.setCharacterEncoding("***")

      其中前兩個只能用于JSP中,而后兩個可以用于JSP和Servlet中。

      1) pageEncoding="***"的作用是設置JSP編譯成Servlet時使用的編碼。

      2) contentType="text/html;charset=***"的作用是指定對服務器響應進行重新編碼的編碼。

      3) request.setCharacterEncoding("***")的作用是設置對客戶端請求進行重新編碼的編碼。

      4) response.setCharacterEncoding("***")的作用是指定服務器響應客戶端請求時進行重新編碼的編碼。JSP文件的運行過程如圖1所示。

      圖1 JSP文件的運行過程圖

      當JSP引擎把JSP文件按pageEncoding所指定的編碼方法編碼轉換為Servlet文件時,若pageEncoding沒有指定,則按照con? tentType所指定方法編碼。若二者都沒有指定,則將按照JVM的默認編碼方法進行編碼。若這一步驟編碼不支持中文,則JSP文件中的中文轉化為Servlet文件時本身就是亂碼。

      客戶端瀏覽器在發(fā)送和接收數(shù)據時,按照JSP文件的contentType所指定的編碼方式來對URL和參數(shù)編碼。服務器在接收數(shù)據時,按照request.setCharacterEncoding的設置對數(shù)據進行編碼,在發(fā)送數(shù)據時,按照response.setCharacterEncoding—contentType—pa? geEncoding的優(yōu)先順序對要發(fā)送的數(shù)據進行URL編碼。在這個過程中,如果參數(shù)中包含中文,而沒有設置好編碼方式,服務器在處理數(shù)據的過程中就會出現(xiàn)中文亂碼問題。

      3 Java Web開發(fā)中文亂碼問題的解決方法

      3.1頁面顯示亂碼

      如果在訪問某個JSP頁面或者Servlet產生的頁面時,頁面上本應顯示中文信息的地方,卻顯示為亂碼,這可能是瀏覽器顯示不正確,也可能是后臺在動態(tài)生成界面的時候,其內容就是亂碼。

      如果是瀏覽器顯示的問題,需要設置JSP或者Servlet的contentType屬性。對于JSP中的設置使用的是page指令,設置如下:<% @page contentType=”text/html”;charset=”GB2312”>

      對于Servlet生成的頁面,可以在輸出頁面之前調用response的setContentType( )方法,其代碼形式如下:response.setContentType(“text/html;charset=GB2312”)

      另外,在生成的HTML文件的頭部可以加入如下代碼:

      以減少中文亂碼的發(fā)生。

      3.2用戶提交的數(shù)據是亂碼

      當表單中提交的中文數(shù)據出現(xiàn)亂碼時,原因是request對瀏覽器提交的數(shù)據解碼不正確。根據表單提交方式的不同,此類亂碼問題有兩種解決方法。

      對于表單中POST方式提交的數(shù)據,數(shù)據是作為請求的消息體發(fā)送的,默認情況下采用ISO8859-1編碼,所以要設置請求對象的字符編碼,代碼形式如下:

      request.setCharacterEncoding("GB2312")

      在響應頁面上使用response.setCharacterEncoding("GB2312")設置編碼方式。

      如果需要處理的頁面過多時,單個處理就會比較麻煩,這時可以通過設置過濾器將所有的request編碼都進行設置。

      對于表單中GET方式提交的數(shù)據或者URL提交的數(shù)據,只在接收數(shù)據的JSP文件或Servlet文件中設置request.setCharacterEn? coding參數(shù)是不行的,因為在Tomcat5.0中,默認情況下使用ISO8859-1對URL提交的數(shù)據和表單中GET方式提交的數(shù)據進行編碼。因此,在這種情況下,需要修改Tomcat的server.xml文件。具體方法如下:

      在Tomcat的server.xml文件中,在port號為8080的Connector元素中增加一個屬性:URIEncoding="GB2312"。

      3.3數(shù)據庫中的數(shù)據是亂碼

      如果在寫入數(shù)據庫的時候出現(xiàn)亂碼,而我們確定是以GB2312的編碼方式發(fā)送到數(shù)據庫上的,那么說明數(shù)據庫可能不支持GB2312的格式。如果數(shù)據庫支持中文,那么亂碼問題可能就是出現(xiàn)在讀取數(shù)據庫的過程中發(fā)生了編碼轉化。

      以MySQL 5.0為例,解決中文漢字編碼可以采取下面的方法:

      1)在向表中插入中文時,先把中文字符編碼轉換為ISO8859-1編碼,然后再插入表中,而讀取時,先把數(shù)據庫中的內容轉換為GB2312編碼,再讀取。這種方式雖然有效,但是使用起來非常繁瑣,而且容易出錯。全球化軟件開發(fā)中要求盡量避免使用這種編碼方式。

      2)修改MySQL的配置文件。打開< MYSQL_HOME> my.init文件,把[ mysqld]區(qū)的語句default-characterset=latin1修改為de? fault-characterset=GB2312,在[client]區(qū)增加default-characterset= GB2312。修改后,數(shù)據庫默認支持的編碼格式就被改成了GB2312編碼,這樣就根本解決了MySQL的數(shù)據庫亂碼問題。

      4結論

      綜上所述,我們了解了Web應用中常用的編碼方式,分析了Java Web應用開發(fā)過程中的編碼轉換,找到了在J2EE平臺下Web應用中出現(xiàn)中文亂碼問題的根源,并針對不同的情況給出了具體的解決方案,這對于解決中文亂碼問題,將會有很大的幫助。

      參考文獻:

      [1]孫衛(wèi)琴.Tomcat與Java Web開發(fā)技術詳解[M].北京:電子工業(yè)出版社,2005.

      [2]孫鑫.Java Web開發(fā)詳解[M].北京:電子工業(yè)出版社,2007.

      [3]劉永立.Java環(huán)境下Web程序的中文亂碼問題與對策[J].電腦編程技巧與維護,2011(14):136-139.

      [4]張洪偉.Tomcat Web開發(fā)及整合應用[M].北京:清華大學出版社,2006.

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

      [6]耿祥義,張躍平.JSP實用教程[M].北京:清華大學出版社,2007.

      [7]李剛.輕量級JavaEE企業(yè)應用實戰(zhàn)——Struts 2+Spring+Hibernate融合開發(fā)[M].北京:電子工業(yè)出版社,2008.

      [8]金恩華,徐良賢.J2EE Web應用中漢字編碼的研究[J].計算機應用與軟件,2005(22).

      昂仁县| 盐津县| 万盛区| 梁平县| 绥中县| 鹤山市| 临夏市| 霍林郭勒市| 洞口县| 济宁市| 昌平区| 渭南市| 威远县| 朔州市| 崇礼县| 峨边| 乃东县| 比如县| 巨鹿县| 宁陕县| 富裕县| 霍林郭勒市| 临沭县| 永和县| 拉萨市| 大邑县| 岳池县| 云龙县| 车险| 扎鲁特旗| 上蔡县| 奉节县| 南丹县| 荃湾区| 饶平县| 新余市| 韶关市| 开平市| 嘉荫县| 平凉市| 和顺县|