學海拾遺

          生活、技術(shù)、思想無處不在學習
          posts - 52, comments - 23, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Java Web的中文問題

          Posted on 2008-03-20 09:43 tanzek 閱讀(502) 評論(0)  編輯  收藏

          摘自王俊標編著的《精通Java Web開發(fā)-基于Struts EJB Hibernate JBuilder》一書:

          1、頁面請求
          ???采用Filter過濾器方式:
          ??????????????????web.xml片段

          ?1 ……
          ?2 <!-- ?filter?配置? -->
          ?3 < filter >
          ?4 ???? <!-- ?filter?別名? -->
          ?5 ???????? < filter-name > encodingfilter </ filter-name >
          ?6 ???????? <!-- ?類文件位置? -->
          ?7 ???????? < filter-class > login3.EncodingFilter </ filter-class >
          ?8 ????????
          ?9 ???????? <!-- ?定義屬性encoding="gb2312"?即指定編碼類型? -->
          10 ???????? < init-param >
          11 ???????????? < desription > encode?to?gb2312 </ desription >
          12 ???????????? < param-name > encoding </ param-name >
          13 ???????????? < param-value > gb2312 </ param-value >
          14 ???????? </ init-param >
          15 </ filter >
          16
          17 <!-- ?filter?映射配置? -->
          18 < filter-mapping >
          19 ???? <!-- ?定義該filter?處理所有格式的請求? -->
          20 ???? < filter-name > encodingfilter </ filter-name >
          21 ???? < url-pattern > /* </ url-pattern >
          22 </ filter-mapping >
          23 ……

          ?????????EncodingFilter.java

          ?1 import ?java.io.IOException;
          ?2
          ?3 import ?javax.servlet. * ;
          ?4 import ?javax.servlet.http.HttpServlet;
          ?5
          ?6 public ? class ?EncodingFilter? extends ?HttpServlet?
          ?7 ???? implements ?Filter? {
          ?8 ????
          ?9 ???? private ?FilterConfig?filterConfig;
          10 ????
          11 ???? private ?String?targetEncoding? = ? null ;
          12 ????
          13 ???? public ? void ?init(FilterConfig?filterConfig)? throws ?ServletException? {
          14 ???????? this .filterConfig? = ?filterConfig;
          15 ???????? this .targetEncoding? = ? this .filterConfig.getInitParameter( " encoding " );
          16 ????}

          17
          18 ???? public ? void ?doFilter(ServletRequest?request,?ServletResponse?response,
          19 ????????????FilterChain?chain)? throws ?IOException,?ServletException? {
          20 ???????? try ? {
          21 ????????????System.out.println( " targetEncoding?: " ? + ?targetEncoding? + ? " \n " );
          22 ????????????request.setCharacterEncoding(targetEncoding);
          23 ????????????chain.doFilter(request,?response);
          24 ????????}
          ? catch ?(ServletException?sx)? {
          25 ????????????filterConfig.getServletContext().log(sx.getMessage());
          26 ????????}
          ? catch ?(IOException?iox)? {
          27 ????????????filterConfig.getServletContext().log(iox.getMessage());
          28 ????????}

          29 ????}

          30 ????
          31 ???? public ? void ?destroy()? {
          32 ???????? this .filterConfig? = ? null ;
          33 ???????? this .targetEncoding? = ? null ;
          34 ????}
          ????
          35 }

          36


          2、Web容器編碼
          ??????在Tomcat的的源代碼中的getParameter()方法,用戶調(diào)用request.getParameter()方法時,首先調(diào)用parsetParameters()方法,在這里面將編碼進行轉(zhuǎn)換。如:
          ??????String s_target = new String (s_source.getBytes("iso-8859-1"), "gb2312);

          3、數(shù)據(jù)庫
          ??????MySQL中文問題的主要原因是:它對數(shù)據(jù)進行編碼時,采用了和底層的操作系統(tǒng)所不同的編碼。通常MySQL在中文Windows平臺上正確的編碼方式是GBK。因此只要將MySQL安裝目錄下的my.ini文件中的default-character-set選項設(shè)為GBK即可。

          4、響應結(jié)果
          ??????對于Servlet的代碼處理,可以使用:
          ?????????……
          ?????????respsonse.setContentType("text/html;charset=GB2312");
          ?????????……
          ??????對于JSP文件,可以在開頭部分添加如下聲明:
          ?????????……
          ?????????<%@ page contentType="text/html;charset=GB2312" %>
          ?????????……
          ??????對于HTML頁面文件,則在開頭部分添加聲明如下:
          ?????????……
          ?????????<head>
          ????????????<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=GB2312">
          ?????????</head>
          ?????????……
          5、XML文件
          ??????在采用"UTF-8"方式編碼的情況下,使用XML文件存儲中文數(shù)據(jù)常常會出現(xiàn)亂碼的問題,建議使用"GB2312":
          ??????<?xml version='1.0' encoding="GB2312"


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 太康县| 宜宾市| 义乌市| 永济市| 连城县| 怀柔区| 苏州市| 鄂托克旗| 穆棱市| 阜阳市| 仙居县| 徐汇区| 沙河市| 天全县| 沈丘县| 依安县| 伊宁市| 仙桃市| 香港| 沐川县| 密山市| 新化县| 图们市| 那曲县| 辽阳县| 齐河县| 富顺县| 延庆县| 尚志市| 砀山县| 上高县| 新安县| 桑植县| 冕宁县| 贵阳市| 醴陵市| 德化县| 鄂托克旗| 石景山区| 斗六市| 习水县|