亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        如何解決Tomcat的亂碼

        2012-08-15 00:54:23楊麗慧
        關(guān)鍵詞:字符集亂碼服務(wù)器端

        楊麗慧

        (河北民族師范學(xué)院 信息中心,河北 承德 067000)

        如何解決Tomcat的亂碼

        楊麗慧

        (河北民族師范學(xué)院 信息中心,河北 承德 067000)

        針對(duì)在JSP/Servlet程序設(shè)計(jì)中,服務(wù)器用Tomcat在頁(yè)面上經(jīng)常會(huì)看到亂碼。就這個(gè)問(wèn)題提出幾種解決的方法。

        tomcat;JSP/Servlet;GET;POST;Filter

        開(kāi)發(fā)項(xiàng)目時(shí),用JSP/Servlet編程,服務(wù)器用tomcat,經(jīng)常會(huì)看到亂碼。所以就亂碼的問(wèn)題同大家探討一下。

        1.頁(yè)面靜態(tài)內(nèi)容亂碼

        在JSP/Servlet中主要在以下幾個(gè)地方可以設(shè)置編碼,<%@page pageEncoding=“UTF-8”%>,建議在每個(gè)頁(yè)面上都加上pageEncoding設(shè)定,讓?xiě)?yīng)用服務(wù)器能正確把JSP文件按照設(shè)定的編碼轉(zhuǎn)換為Java文件,只要這個(gè)pageEncoding設(shè)置正確就可以避免靜態(tài)內(nèi)容的亂碼。有的時(shí)候沒(méi)有設(shè)置也沒(méi)有亂碼,那是因?yàn)閼?yīng)用服務(wù)器還可以讀取<%@page content-Type=“text/html;charset=UTF-8”%>中的charset作為備選方案,雖然這是JSP規(guī)范中要求的,但是難保有的容器沒(méi)有實(shí)現(xiàn)或?qū)崿F(xiàn)有BUG,所以有時(shí)候在某個(gè)應(yīng)用服務(wù)器下 (如Tomcat)不設(shè)置pageEncoding也可以,但是同樣的頁(yè)面拿到別的應(yīng)用服務(wù)器下就有可能出現(xiàn)亂碼。

        2.動(dòng)態(tài)生成內(nèi)容亂碼

        新下載的Tomcat沒(méi)有經(jīng)過(guò)任何特殊的設(shè)置,無(wú)論是GET和POST都出現(xiàn)亂碼。首先設(shè)置HTTP Connector(server.xml中監(jiān)聽(tīng)8080端口的那個(gè)Connector),加上URIEncoding=“UTF-8”,消除了GET亂碼,再在 JSP頁(yè)面中第一句加入<%request. setCharacterEncoding(“UTF-8”)%>,消除了POST亂碼。通過(guò)上面兩個(gè)設(shè)置我們發(fā)現(xiàn),URIEncoding控制的是GET字符集編碼,Request的CharacterEncoding控制的是POST字符集編碼。

        上面提到的<%@page contentType=“text/html;charset=UTF-8”%>,除了聲明返回給客戶(hù)端的流是text/html外,同時(shí)設(shè)置了Response的CharacterEncoding,相當(dāng)于執(zhí)行了Response.setCharacterEncoding (“UTF-8”)這段代碼。它保證了服務(wù)器端生成的動(dòng)態(tài)內(nèi)容到達(dá)客戶(hù)端也不會(huì)亂碼。

        但有一種情況下也不會(huì)出現(xiàn)亂碼,就是如下例這種情況,前提是沒(méi)有設(shè)置Request的CharacterEncoding:

        1 protected void doPost(HttpServletRequest request ,HttpServletResponse response) throws ServletException,IOException{

        2 response.getWriter().write(request.getParameter(“xxxxx”));

        3}

        這種情況下提交過(guò)來(lái)的表單數(shù)據(jù)其實(shí)是ISO-8859-1的編碼,而返回給客戶(hù)端又沒(méi)有<%@page contentType=“text/html;charset=UTF-8”%>的設(shè)置,所以還是ISO-8859-1的編碼,但是為什么沒(méi)有亂碼呢?其實(shí)已經(jīng)亂碼了,如果在第2行下斷點(diǎn)的話(huà),會(huì)發(fā)現(xiàn)request.getParameter(“xxxxx”)的返回值就是亂碼??梢杂靡痪銳ava代碼來(lái)解釋為什么客戶(hù)端顯示結(jié)果沒(méi)有亂碼,如下:

        System.out.println(new String(“你好,世界”.get-Bytes(“ISO-8859-1”),“ISO-8859-1”);

        很奇怪這句代碼,明明是中文,應(yīng)該用GB2312或GBK之類(lèi)的字符集編碼來(lái)getBytes,卻用了ISO-8859-1,事實(shí)證明,這種互逆操作對(duì)字符串本身沒(méi)有任何影響,只要getBytes和new String的時(shí)候字符集編碼是一致的就不會(huì)引起亂碼。

        上面這句代碼正好說(shuō)明了數(shù)據(jù)從客戶(hù)端POST到服務(wù)器端時(shí)是ISO-8859-1編碼,然后從服務(wù)器端寫(xiě)回到客戶(hù)端還是ISO-8859-1編碼,所以就沒(méi)有造成亂碼,如果這里不是直接寫(xiě)回到客戶(hù)端,而是forward到另一個(gè)JSP頁(yè)面,而這個(gè)頁(yè)面恰好使用了<%@page contentType=“text/html;charset=UTF-8”%>來(lái)設(shè)置Response的CharacterEncoding,那么在頁(yè)面中輸出xxxxx還會(huì)產(chǎn)生亂碼,同樣用一句Java代碼來(lái)解釋?zhuān)缦拢?/p>

        System.out.println(new String(“你好,世界”.get-Bytes(“ISO-8859-1”),“UTF-8”));

        所以,最后結(jié)論是如果想POST到服務(wù)器端不亂碼就要設(shè)置Request的CharacterEncoding,寫(xiě)回到客戶(hù)端不亂碼就要設(shè)置 Response的CharacterEncoding,若是JSP頁(yè)面要設(shè)置<%@page contentType=“text/html;charset=UTF-8”%>。

        3.AJAX亂碼問(wèn)題 (不借助任何JS框架,像Prototype之類(lèi)的框架會(huì)對(duì)GET請(qǐng)求的queryS-tring自動(dòng)應(yīng)用encodeURIComponent()編碼)

        GET請(qǐng)求時(shí),需要對(duì) queryString使用 encodeURIComponent()編碼之后再提交到服務(wù)器。這是XMLHttpRequest規(guī)范所要求的。

        POST請(qǐng)求時(shí),不需要使用encodeURIComponent()。

        通過(guò)對(duì)應(yīng)用程序下斷點(diǎn)發(fā)現(xiàn),GET請(qǐng)求和POST請(qǐng)求的數(shù)據(jù)發(fā)送到服務(wù)器端都是正常的沒(méi)有亂碼,但是服務(wù)器端生成的動(dòng)態(tài)內(nèi)容寫(xiě)回客戶(hù)端卻是亂碼,說(shuō)明Response的CharacterEncoding設(shè)置錯(cuò)誤,反過(guò)來(lái)我們?cè)傧胍幌拢揪蜎](méi)有設(shè)置過(guò)Response的CharacterEncoding,為什么呢?因?yàn)槭且訟JAX的方式提交表單,返回后不像JSP頁(yè)面那樣有<%@page contentType=“text/html;charset=UTF-8”%>來(lái)設(shè)置Response的CharacterEncoding,所以就會(huì)出錯(cuò)。

        綜合上述,解決的辦法就是各大網(wǎng)站提出的通用解決方案Filter,如果應(yīng)用沒(méi)有用到AJAX,只設(shè)置Request的CharacterEncoding即可,否則Response的CharacterEncoding也要設(shè)置。

        TP3

        A

        2095-3763(2012)02-0062-02

        2012-01-05

        楊麗慧(1972-),女,河北張家口人,河北民族師范學(xué)院信息中心副教授,碩士。

        猜你喜歡
        字符集亂碼服務(wù)器端
        這些真的不是亂碼,是漢字
        MySQL數(shù)據(jù)庫(kù)字符集的問(wèn)題研究
        ORACLE字符集問(wèn)題的分析
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        ORACLE數(shù)據(jù)庫(kù)字符集問(wèn)題及解決方法
        醫(yī)院信息系統(tǒng)Oracle數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)中文亂碼的解決技術(shù)
        在Windows中安裝OpenVPN
        炫邁:用神奇亂碼勾引你視線
        網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
        字幕亂碼一鍵清
        日韩成人极品在线内射3p蜜臀| 中文字幕人妻被公喝醉在线| 国产精品女同av在线观看| 国产91传媒一区二区三区| 日本中国内射bbxx| 久久人与动人物a级毛片| 狠狠躁夜夜躁人人爽天天| 亚洲国产精品日韩专区av| 国产午夜激情视频在线看| 97cp在线视频免费观看| 国产偷久久久精品专区| 欧美激情内射喷水高潮| 欧美精品videosse精子| 麻豆久久久9性大片| 精品一区二区av天堂| 久久精品国产亚洲av蜜桃av| 日本av在线精品视频| 亚洲一区久久久狠婷婷| 日本高级黄色一区二区三区| 亚洲 日韩 激情 无码 中出| 久久99国产精品久久99果冻传媒 | 久久精品国产亚洲av麻豆图片| 亚洲av之男人的天堂网站| 亚洲大片免费| 日韩熟女精品一区二区三区视频 | 国产一区二区三区视频了| 美女露出奶头扒开内裤的视频| 国产在线精品一区二区三区| 男受被做哭激烈娇喘gv视频| 日韩啪啪精品一区二区亚洲av| 黄色大片国产精品久久| 黄色潮片三级三级三级免费| 最新国产精品拍自在线观看| 亚洲人成网址在线播放| 3d动漫精品一区二区三区| 亚洲国模一区二区三区视频| 日本在线观看一区二区视频| av剧情演绎福利对白| 国产莉萝无码av在线播放| 国产精品成人午夜久久| 加勒比特在线视频播放|