<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    tomcat中文問題的解決


    第一,存文件必須以一種編碼存;讀文件也必須以一種編碼讀,如不特別設置,去系統默認的編碼,中文windows為GBK編碼。

    從.java->.class過程是,先編寫.java文件并按莫種編碼方式保存,然后用javac方法編譯此文件,注意如.java沒按系統默認編碼保存則要帶encoding參數指明實際編碼,否則出錯,生成的.class文件存為系統默認編碼。

    從.jsp->.java->.class,先存為某種編碼的.jsp文件,然后tomcat根據pageEncoding讀取并轉化為servlet存為系統默認編碼,然后同上面.java->.class過程。

    第二,IDE的encoding為對系統下文件打開的解碼方式或保存的編碼方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,則eclipse會自動存為UTF-8方式,不管eclipse的encoding是什么,這也是eclipse的聰明之處。

    第三,
    pageEncoding="UTF-8"表示此文件的編碼方式,必須與此文件存儲方式一致(所以eclipse會首選根據它來存文件),tomcat根據這個來讀此.jsp文件并編譯為servlet。
    contentType="text/html;charset=UTF-8"表示當瀏覽器得到此文件時以什么方式解碼。例如:
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page contentType="text/html;charset=iso8859-1"%>
    <html>
    <head>
    <title>test</title>
    </head>
    <body>
    我是個好人
    </body>
    </html>
    會產生亂碼,因為存為UTF-8的文件被解碼為iso8859-1,這樣 如有中文肯定出亂碼。

    至此,頁面應為:
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page contentType="text/html;charset=UTF-8"%>
    <html>
    <head>
    <title>中文問題</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    </html>

    第四,
    request.setCharacterEncoding("UTF-8")是把提交內容的字符集設為UTF-8
    response.setCharacterEncoding("UTF-8")可以把頁面中的<%@ page contentType="text/html;charset=iso8859-1"%>換為charset=UTF-8,是給告訴瀏覽器我這個文件的編碼方式。

    第五,表單提交:無論何種表單提交都可以在后臺的java文件中通過String des = new String(s.getBytes("iso8859-1"),"UTF-8");來轉換成你想要的UTF-8編碼方式。但如果每處都加詞句太麻煩,故分post和get兩種方式區分提交(tomcat5以后分開處理,之前處理方式一樣,即都可以用request.setCharacterEncoding("UTF-8")方法處理,不過tomcat5以后get提交方法用此語句無效)。
    1,post提交的數據:
    程序加上org.springframework.web.filter.CharacterEncodingFilter過濾器.
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF8</param-value>
    </init-param>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.html</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    因為規范要求瀏覽器提交數據都要用utf8編碼,所以這里設置編碼方式為UTF8.

    特別注意:
    a,這個過濾器只是簡單的調用:request.setCharacterEncoding(this.encoding);
    在這個語句之前不能調用任何的request.getParameter()方法,否則會設置tomcat的缺省字符集為"ISO-8859-1",并且使setCharacterEncoding的調用失效.所以在這個過濾器之前的過濾器中不能有對getParameter這類方法的調用,比較安全的做法就是把這個過濾器盡量靠前放.
    b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
    這個value也設置tomcat的缺省字符集為"ISO-8859-1",使setCharacterEncoding的調用失效.可能其他的value也有這個問題,我沒有測試過.
    如果要觀察http請求參數,可以考慮用過濾器或者其他工具,例如ethereal([url]http://www.ethereal.com/[/url])

    2,get提交的數據:
    兩種情況:
    a,如果從地址欄直接輸入漢字,則一般編碼為"GBK",需要用
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
    取出
    b,如果是頁面超連接連接中帶的漢字,則編碼根據頁面編碼的不同而不同,如果頁面的
    content="text/html; charset=utf-8",則在tomcat/conf/server.xml中的配置文件中:
    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <Connector port="8080"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
    disableUploadTimeout="true" />

    加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正確內容.
    如果content="text/html; charset=GBK",需用
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
    取出,其他情況類似.

    總結:
    1,所有頁面使用utf8編碼,
    2,服務器加上過濾器,
    3,server.xml中不要使用
    <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
    4,server.xml文件加上useBodyEncodingForURI="true"
    這樣應該可以搞定大多數前臺的中文問題.至于地址欄輸入中文,不支持也罷,一般的程序很少要求
    從這里輸入.

    第六,連接數據庫

    1、mysql配置文件:
    修改mysql在windows\my.ini里default-character-set=utf-8

    2、mysql里數據庫和表也都設為utf8_unicode_ci

    3、數據庫連結:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
    注意,關鍵就在于此:此句中間是'&'不是'&'這是因為數據庫連結時,在.jsp和.java文件中應該用&號,而XML文件中需要用&

    對于Web容器來說,如果你不設置,默認是ISO8859-1
    String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用這個 不論哪里,有亂碼就是用
    posted on 2010-01-12 17:41 小菜毛毛 閱讀(46575) 評論(1)  編輯  收藏 所屬分類: J2EE相關技術與框架

    Feedback

    # re: tomcat的編碼設置 2014-03-24 10:25 V剎
    地產商的范兒給他反而  回復  更多評論
      

    主站蜘蛛池模板: 国产一区二区三区在线免费| 韩国日本好看电影免费看| 亚洲国产精品成人久久蜜臀| 蜜芽亚洲av无码一区二区三区| 免费观看黄网站在线播放| 亚洲人成人无码.www石榴| 国内精品免费视频自在线| 亚洲精品又粗又大又爽A片| 日韩一级免费视频| 一级视频在线免费观看| 亚洲熟妇中文字幕五十中出| 久久精品成人免费看| 久久亚洲国产成人精品性色| 91精品免费在线观看| 最新国产精品亚洲| 免费在线观看黄网| 中文永久免费观看网站| 亚洲精品人成在线观看| 91香蕉视频免费| 精品国产亚洲AV麻豆| 亚洲?V无码成人精品区日韩| 亚欧洲精品在线视频免费观看| 国产亚洲欧洲Aⅴ综合一区| 一级成人a毛片免费播放| 久久国产亚洲精品| 亚洲色偷偷狠狠综合网| 久久久久国产免费| 亚洲熟妇无码一区二区三区导航| 亚洲AV无码成人精品区大在线| 99精品全国免费观看视频..| 亚洲美女自拍视频| 免费大黄网站在线观| a级毛片视频免费观看| 亚洲一区中文字幕在线电影网| 免费大片黄手机在线观看| 99久久久国产精品免费牛牛四川| 亚洲欧洲专线一区| 亚洲大尺度无码无码专区| 波多野结衣久久高清免费| 波多野结衣免费一区视频| 亚洲中文字幕无码中文|