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

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

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

    隨筆 - 42  文章 - 71  trackbacks - 0
    <2009年7月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    之前其實遇到過fmt:formatDate標簽導致頁面中文亂碼的問題,但是當時是我同事修改了程序解決的,我沒有自己研究。昨天需要用到fmt標簽了,想起來這個問題,嘗試重現了一下,在Resin上是正常的,在WebSphere上是亂碼的,于是就研究研究吧。

    由于歷史原因,我們現在使用的軟件產品、開源框架都比較舊,列在下面:

    J2EE Web: 2.3

    JSTL: 1.0.6, 需要JSP 1.2 的Web容器支持

    生產環境:JDk 1.4.2, WebSphere: 5.1.1.19,支持Servlet 2.3, JSP 1.2, EJB 2.0

    開發環境:JDK 1.5.0(javac時編譯為1.4版本), Resin: 3.2.1

    文件編碼及頁面ContentType中的編碼:UTF-8

     

    首先,使用Fiddler跟蹤一下,發現頁面響應的編碼不再是我在頁面設置的UTF-8了,而是變成了GB13080。根據JSTL的說明文檔,很多fmt標簽都會調用fmt:setLocale,比如fmt:formatDate, fmt:formatNumber等。而fmt:setLocale會通過調用ServletResponse.setLocale方法來設置響應的Locale。在Servlet 2.3規范中,設置響應的Locale會影響頁面的編碼,同時規范中也說到,如果調用ServletResponse.setContentType,并且在參數中指明charset,那么會使用charset去覆蓋由于ServletResponse.setLocale導致的編碼。

     

    問題的原因比較清楚了,解決辦法有這么幾種

    1. 在調用了fmt標簽之后,通過response.setContentType("text/html; charset=UTF-8");來重設頁面編碼。但是這是不現實的,也是很傻的

    2. 使用Filter設置Response的編碼。比如org.springframework.web.filter.CharacterEncodingFilter。Sorry,Servlet 2.3規范中,僅有getCharacterEncoding(),沒有setCharacterEncoding。所以在org.springframework.web.filter.CharacterEncodingFilter的代碼中,有一個靜態變量,就是用來檢測Web容器是否提供setCharacterEncoding編碼的:

    private final static boolean responseSetCharacterEncodingAvailable = ClassUtils.hasMethod(
                HttpServletResponse.class, "setCharacterEncoding", new Class[] {String.class});

     

    3. 設置Locale和編碼的對照。還是不行,因為從Servlet 2.4 才開始提供Locale和編碼的映射關系,在web.xml里面:

    <locale-encoding-mapping-list>
        <locale-encoding-mapping>
            <locale>ja</locale>
            <encoding>Shift_JIS</encoding>
        </locale-encoding-mapping>
    </locale-encoding-mapping-list>

     

    方法1太傻,即使它能解決這個問題,也不能真的用這種方法;方法2和方法3在我們現在環境中不支持。

    所以,最后,放棄了fmt,使用Struts的bean:write。

    JSTL,挺好的東西,俺只有望洋興嘆的份了~~~

    Technorati 標簽: ,,,,
    posted on 2009-07-22 22:27 YODA 閱讀(4104) 評論(3)  編輯  收藏

    FeedBack:
    # re: JSTL fmt 標簽導致中文亂碼的問題 2009-07-24 13:04 施華洛世奇
    好好取理  回復  更多評論
      
    # re: JSTL fmt 標簽導致中文亂碼的問題 2009-09-27 17:17 catchersun
    YODA大師真是很厲害,初次訪問你的blog很有收獲  回復  更多評論
      
    # re: JSTL fmt 標簽導致中文亂碼的問題 2009-10-21 21:16 BeanSoft
    從 WebLogicFans 鏈過來的 參觀一下 WebLogic 高手的 Blog  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品国产品国语在线| 特黄特色大片免费| 国产亚洲精品成人AA片新蒲金| 日韩免费精品视频| a级毛片免费高清毛片视频| 国产精品亚洲一区二区三区 | 亚洲中文字幕人成乱码| 在线精品亚洲一区二区三区| 国产成人免费A在线视频| 国产在线jyzzjyzz免费麻豆| 久久久久久久综合日本亚洲| 国产一区二区视频免费| 国产美女在线精品免费观看| 中文字幕在线观看免费视频 | 亚洲乱码日产精品a级毛片久久| 国产精品69白浆在线观看免费| 污视频在线免费观看| 特级做A爰片毛片免费看无码 | 妞干网免费视频在线观看| 222www免费视频| 国产激情免费视频在线观看| 在线免费观看伊人三级电影| 人妻18毛片a级毛片免费看| 久久精品国产亚洲AV天海翼| 亚洲熟妇AV一区二区三区浪潮| 亚洲中文字幕无码av在线| 亚洲欧洲日产国码二区首页| 亚洲美女视频一区二区三区| 亚洲成年人在线观看| 亚洲韩国—中文字幕| 日木av无码专区亚洲av毛片| 亚洲国产精品特色大片观看完整版| 一本色道久久综合亚洲精品高清| 亚洲国产精品狼友中文久久久 | 99亚洲乱人伦aⅴ精品| 亚洲AV无码一区二区大桥未久| 亚洲精品无码永久在线观看你懂的 | 少妇亚洲免费精品| 又粗又硬免费毛片| 亚洲精品国产综合久久一线| 2048亚洲精品国产|