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

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

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

    隨筆-57  評論-202  文章-17  trackbacks-0

          在網上有很多有關Struts的中文解決方案,但是很多都說得很零碎,不夠完整。下面是我的一個完整解決方案。
          要使網頁能夠真正實現多語言,有三個地方都需要修改:
          1.在頁面部分,一定要把頁面的編碼設成UTF-8,就是在開頭加上這一句:<%@ page contentType="text/html; charset=UTF-8" %>。并且把所有的文字信息都放到resource文件中。
          以前我在寫網頁的時候,沒有指定頁面的編碼,總是在獲取表單的內容后,要人工的用new String(s.getBytes("ISO8859-1"))轉換一下,這樣是很繁瑣的,而且很容易出錯。網頁中如果沒有指定編碼,那么默認的就是用ISO8859-1編碼的。
          2.相應的資源文件需要用native2ascii轉換一下。
          對于簡體中文的資源文件:native2ascii -encoding gbk ApplicationResources_zh.properties convert\ApplicationResources_zh.properties
          對于繁體中文的資源文件:native2ascii -encoding big5 ApplicationResources_zh_tw.properties convert\ApplicationResources_zh_tw.properties

          3.需要用一個filter設置一下request的編碼,我的代碼如下:

     1import java.io.*;
     2import java.util.*;
     3import javax.servlet.*;
     4import javax.servlet.http.*;
     5
     6/**
     7 * <p>Title: </p>
     8 * <p>Description: </p>
     9 * <p>Copyright: Copyright (c) 2003</p>
    10 * <p>Company: </p>
    11 * @author George Hill
    12 * @version 1.0
    13 */

    14
    15public class CharsetFilter implements Filter {
    16
    17  private FilterConfig filterConfig;
    18
    19  /**
    20   * Request設置的Charset encoding
    21   */

    22  private String encoding;
    23
    24  /**
    25   * 是否忽略設置Request的Charset encoding
    26   */

    27  private boolean ignore;
    28
    29  //Handle the passed-in FilterConfig
    30  public void init(FilterConfig filterConfig) {
    31    this.filterConfig = filterConfig;
    32
    33    encoding = filterConfig.getInitParameter("encoding");
    34    String value = filterConfig.getInitParameter("ignore");
    35    if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)
    36        || "on".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) {
    37      ignore = true;
    38    }

    39  }

    40
    41  //Process the request/response pair
    42  public void doFilter(ServletRequest request, ServletResponse response,
    43                       FilterChain chain) throws IOException, ServletException {
    44    if (!ignore) {
    45      request.setCharacterEncoding(encoding);
    46    }

    47
    48    chain.doFilter(request, response);
    49  }

    50
    51  //Clean up resources
    52  public void destroy() {
    53    this.filterConfig = null;
    54  }

    55}

    56

          web.xml的相關片斷如下:

     1  <filter>
     2    <filter-name>charsetfilter</filter-name>
     3    <filter-class>xxx.CharsetFilter</filter-class>
     4    <init-param>
     5      <param-name>encoding</param-name>
     6      <param-value>UTF-8</param-value>
     7    </init-param>
     8    <init-param>
     9      <param-name>ignore</param-name>
    10      <param-value>false</param-value>
    11    </init-param>
    12  </filter>
    13  <filter-mapping>
    14    <filter-name>charsetfilter</filter-name>
    15    <url-pattern>/*</url-pattern>
    16  </filter-mapping>

          這樣,在Action中處理表達的內容時,就不需要再做轉換;而且在Action中處理數據給頁面顯示時,也不需要做轉換。在頁面中可以同時顯示簡體和繁體的內容,不需要去設置IE的編碼。
          另外需要說明的就是如果數據庫也支持編碼的話,最好也是設成UTF-8編碼,這樣才能夠完整的解決多語言的問題。例如MySQL 4.1以上的版本可以設置編碼成utf8,在JDBC的URL中可以指定編碼為UTF-8。
    posted on 2005-05-13 14:26 小米 閱讀(2285) 評論(11)  編輯  收藏 所屬分類: Struts

    評論:
    # re: Struts的國際化完整解決方案 2005-08-11 17:40 | jiangyigirl
    小米,我按照你所說的方法,都進行了設置,可是還是亂碼,我用的是Sybase數據庫,可是,我對數據庫也進行了utf-8設置,那么問題出在哪里呢  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-17 09:31 | 小米
    呵呵,很久都沒有上來我的博客看看了。你的問題解決了么?你可以測試一下,看看從數據庫取出來的是否能夠正確顯示出來,然后再看看頁面中有沒有設置編碼為UTF-8。  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-18 10:34 | jiangyigirl
    我的問題仍沒有解決,數據庫取出的為亂碼,頁面也進行了設置  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-18 11:52 | 小米
    我覺得問題應該是出在你從數據庫中取數據的過程,因為一般來說,如果從數據庫中取出的數據用System.out.println()方法輸出能夠正常顯示的話,那么在頁面上設置正確就可以了。  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-18 14:33 | jiangyigirl
    對呀,用System.out.println()輸出也是亂碼,按照你說的設置為utf-8,亂碼為½ªÒã ,設置為gb2312,亂碼為??。當然,在java中用System.out.println()輸出的亂碼都為??,我已經把數據庫的charset設置為utf-8,也加了過濾器,可還是亂碼,怎么回事,而且,properties文件中的漢字,有的正常顯示,有的也顯示為漢字,但字體卻不正常  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-18 21:37 | 小米
    我覺得你可能要認真看看Sybase JDBC的相關文檔。那個過濾器是用在頁面上的,不是用在數據庫這一層。你首先要確保從數據庫中取出的數據用System.out.println能夠正常顯示出來。  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-22 18:47 | jiangyigirl
    我把服務器和jdbc連接的字符集都設為utf_8是,顯示的仍為亂碼
    但我把服務器設置為iso8859_1編碼,jdbc連接時的字符集設置為cp936(即gbk),從數據庫中讀出可以正常顯示,但是插入就不對了,是不是因為服務器和jdbc設置的字符集不一樣的緣故,真是暈死了,我都快瘋了  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-22 23:40 | 小米
    由于我沒有使用過Sybase數據庫,所以你問問對Sybase熟的人吧。我沒有辦法幫你解答,抱歉。  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-23 08:50 | jiangyigirl
    沒關系,thank you all the same,謝謝你騰出寶貴的時間來幫我!
    我還有一個關于過濾器的問題,就是我寫好過濾器的代碼,并在web.xml中如下配置 <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.SetCharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <servlet-name>/*</servlet-name>
    </filter-mapping>
    可是我發現我的頁面并不經過我的過濾器對字符進行編碼,這是怎么回事啊  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-23 23:28 | 小米
    你用的web server是什么?能把你的filter的代碼貼上來看看么?  回復  更多評論
      
    # re: Struts的國際化完整解決方案 2005-08-24 10:28 | jiangyigirl
    問題解決了,是我的配置文件<servlet-name>/*</servlet-name>
    寫錯了,真不好意思,謝謝你  回復  更多評論
      
    主站蜘蛛池模板: 国产羞羞的视频在线观看免费| 一个人免费观看视频在线中文| 亚洲欧洲免费视频| 亚洲AV无码一区二区乱子伦| 久久精品私人影院免费看| 亚洲欧洲国产日韩精品| 一级毛片免费观看不卡的| 亚洲狠狠久久综合一区77777| 午夜不卡久久精品无码免费| 久久精品国产亚洲av麻| 一级特黄aa毛片免费观看| 亚洲国产成人综合| 成人免费看黄20分钟| 国产天堂亚洲精品| 国产亚洲精品影视在线产品 | 国产精品亚洲五月天高清| 国产成人在线免费观看| 免费精品视频在线| 亚洲日韩精品射精日| 亚洲一区免费观看| 456亚洲人成在线播放网站| 国产乱子伦精品免费无码专区| 老湿机一区午夜精品免费福利| 亚洲一级片内射网站在线观看| 免费黄网站在线看| 亚洲乱码在线观看| 亚洲精品无码激情AV| 国产精品免费高清在线观看| 亚洲av极品无码专区在线观看| 四虎影视精品永久免费网站| a色毛片免费视频| 亚洲一区二区三区久久| 亚洲AⅤ视频一区二区三区| 日本一道本不卡免费| 亚洲夂夂婷婷色拍WW47| 国产成人毛片亚洲精品| 青娱分类视频精品免费2| 手机永久免费的AV在线电影网| 亚洲一区二区三区首页| 免费国内精品久久久久影院| 污视频在线免费观看|