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

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

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

    posts - 73,  comments - 55,  trackbacks - 0

    第一, 文件的的編碼方式其實(shí)就包括兩方面:存和取, 存文件必須以一種編碼存;讀文件也必須以一種編碼讀。 如果存取按照相同的編碼方式,則不會(huì)有問題,關(guān)鍵就是很多時(shí)候存取的方式不一致,產(chǎn)生亂碼。 ,如不特別設(shè)置取系統(tǒng)默認(rèn)的編碼,中文windows為GBK編碼。

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

    從.jsp->.java->.class,先存為某種編碼的.jsp文件,然后tomcat根據(jù)pageEncoding讀取并轉(zhuǎn)化為servlet存為系統(tǒng)默認(rèn)編碼,然后同上面.java->.class過程。

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

    第三,
    pageEncoding="UTF-8"表示此文件的編碼方式,必須與此文件存儲(chǔ)方式一致(所以eclipse會(huì)首選根據(jù)它來存文件),tomcat根據(jù)這個(gè)來讀此.jsp文件并編譯為servlet(至于編譯成的.java和.class文件應(yīng)該為tomcat服務(wù)器默認(rèn)編碼)。
    contentType="text/html;charset=UTF-8"表示當(dāng)服務(wù)器給瀏覽器傳頁面文件時(shí)編碼方式為UTF-8,形式為HTML。例如:
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page contentType="text/html;charset=GBK"%>
    <html>
    ?<head>
    ??<title>test</title>
    ?</head>
    ?<body>
    ??我是個(gè)好人
    ?</body>
    </html>

    表示本jsp文件存為UTF-8字符集,當(dāng)瀏覽器打開此頁面后,查看原碼就會(huì)發(fā)現(xiàn)源碼為GBK字符集。

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

    第五,表單提交:無論何種表單提交都可以在后臺(tái)的java文件中通過String des = new String(s.getBytes("iso8859-1"),"UTF-8");來轉(zhuǎn)換成你想要的UTF-8編碼方式。但如果每處都加詞句太麻煩,故分post和get兩種方式區(qū)分提交(tomcat5以后分開處理,之前處理方式一樣,即都可以用request.setCharacterEncoding("UTF-8")方法處理,不過tomcat5以后get提交方法用此語句無效)。
    1,post提交的數(shù)據(jù):
    程序加上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>

    因?yàn)橐?guī)范要求瀏覽器提交數(shù)據(jù)都要用utf8編碼,所以這里設(shè)置編碼方式為UTF8.

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

    2,get提交的數(shù)據(jù):
    兩種情況:
    a,如果從地址欄直接輸入漢字,則一般編碼為"GBK",需要用
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
    取出
    b,如果是頁面超連接連接中帶的漢字,則編碼根據(jù)頁面編碼的不同而不同,如果頁面的
    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取出正確內(nèi)容.
    如果content="text/html; charset=GBK",需用
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
    取出,其他情況類似.

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

    第六,連接數(shù)據(jù)庫
    ?

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

    2、mysql里數(shù)據(jù)庫和表也都設(shè)為utf8_unicode_ci

    3、數(shù)據(jù)庫連結(jié):jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
    注意,關(guān)鍵就在于此:此句中間是'&'不是'&amp;'這是因?yàn)閿?shù)據(jù)庫連結(jié)時(shí),在.jsp和.java文件中應(yīng)該用&號(hào),而XML文件中需要用&amp

    posted on 2006-09-05 16:06 保爾任 閱讀(805) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 欧美亚洲精品一区二区| 亚洲欧洲日产韩国在线| 亚洲AV噜噜一区二区三区| aⅴ免费在线观看| 亚洲高清美女一区二区三区| 国产婷婷成人久久Av免费高清 | 久久亚洲国产伦理| 国产免费AV片在线观看| 亚洲综合精品香蕉久久网97| 久操视频在线免费观看| 亚洲高清日韩精品第一区| 1000部国产成人免费视频| 亚洲国产日韩在线一区| 国产免费毛不卡片| 亚洲爆乳无码专区www| 免费一级毛片在线播放| 亚洲国产免费综合| 亚洲AV无码久久| 免费观看美女用震蛋喷水的视频| 亚洲天堂2016| 免费午夜爽爽爽WWW视频十八禁| 特级aaaaaaaaa毛片免费视频| 中文字幕精品无码亚洲字| 精品国产麻豆免费人成网站| 精品日韩亚洲AV无码一区二区三区| 国产四虎免费精品视频| 亚洲高清国产拍精品熟女| 免费一看一级毛片| 久久免费福利视频| 亚洲天堂男人影院| 亚洲伊人久久成综合人影院| 无码人妻精品中文字幕免费 | 337P日本欧洲亚洲大胆艺术图| 亚洲国产午夜中文字幕精品黄网站 | 国产一区二区三区亚洲综合| 亚洲无线观看国产精品| 国产精品永久免费10000| 国产区图片区小说区亚洲区| 国产V亚洲V天堂A无码| 中文字幕无码免费久久99 | 国产成人无码区免费网站|