隨筆 - 115  文章 - 481  trackbacks - 0
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          很多人 特別是新手 做j2ee 項目中
          總能受困于 這樣或那樣的編碼問題

          這里討論下 新手學習,高手指教 一起研究下
          (以 tomcat mysql 做例子 我推薦所有的編碼采用utf-8)

          1 工程
          工程內所有的 .java .jsp .xml .txt 都有默認的編碼 默認的是系統環境的編碼
          我們中文系統通常是GBK 推薦都采用utf-8
          utf-8 的時候 你編譯 生成doc 可能會遇到亂碼(特別是采用ant 的時候,生成doc你幾乎100%會遇到)

          解決方法 以ant 為例子
          編譯 注意 encoding 參數
          <target name="build" >
          ? ? ? ?<mkdir dir="${build.dir}" />
          ? ? ? ?<javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true">
          ? ? ? ? ? ?<src path="${src.dir}" />
          ? ? ? ? ? ?<classpath refid="master-classpath" />
          ? ? ? ?</javac>
          ? ?</target>

          生成doc 注意 encoding 和 charset
          <target name="doc">
          <mkdir dir="doc" />
          <javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" >
          <classpath refid="master-classpath" />
          </javadoc>
          </target>

          這里 的encoding 就是指的你 java 文件的編碼格式 javac 和javadoc 都有這個參數
          charset 指的是 生成 doc 后的編碼方式 javadoc 的參數

          2 數據庫
          mysql 的編碼最復雜 從4以后 mysql 號稱支持多編碼 它更靈活了 我們也更麻煩了
          mysql 有4個級別的編碼
          系統級
          庫級
          表級
          sql語句級
          請保持采用統一的編碼 推薦utf-8
          其它數據庫要簡單的多 一般都是一種編碼

          3 web server
          tomcat 為例
          tomcat server.xml 中一個參數
          <Connectorport="8080" maxHttpHeaderSize="8192"
          maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" redirectPort="8443" acceptCount="100"
          connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/>
          經測試 這個URIncoding 參數主要是 get 方法中采用編碼

          4 jsp 顯示層
          第1條中說明了 jsp 文件本身的格式
          很多朋友采用eclipse +myeclipse 生成jsp
          它自動生成一個頭<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          不要誤解 這句話不能保證你在ie里看到的不是亂碼
          pageEncoding它的意思是 這個頁面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ,我不確定)
          為了在ie 里不亂碼 ?你還得加一句 <%@ page contentType="text/html; charset=UTF-8"%>
          它不能在(myeclispe)自動生成 ?推薦修改 myeclipse的模板 在下邊的目錄里
          MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates
          里邊的jsp模版 你加上<%@ page contentType="text/html; charset=${encoding}"%>

          5 filter
          自從tomcat 4 以后 網上就流傳了一個SetCharacterEncodingFilter 過濾器 搜一下有很多
          很好用 web.xml 中加入
          <filter>
           <filter-name>Set Character Encoding</filter-name>
           <filter-class>filters.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>
           <url-pattern>/*</url-pattern>
           </filter-mapping>

          6 資源文件
          首先保證 文件本身是utf-8
          然后部署的時候用 native2ascii 轉換
          這里給出 ant 里的例子
          <native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" />

          總結
          到這里 你應該徹底解決了亂碼了 嘿嘿
          寫的有點亂 還請高手們多指點

          (本文作者:EasyJF開源團隊? 散仙 歡迎轉載,轉載請保留作者聲明,謝謝!)?

          posted on 2006-06-12 11:29 簡易java框架 閱讀(2647) 評論(3)  編輯  收藏

          FeedBack:
          # re: 編碼討論---亂碼問題之終極解決 2006-06-12 11:47 huxiaofei
          native2ascii轉換是做什么用的?
          煩請指教。  回復  更多評論
            
          # re: 編碼討論---亂碼問題之終極解決 2006-06-12 12:57 Flyingis
          JDK中提供的native2ascii命令,能夠實現字符編碼的轉換。
          在樓主的文章中,用來轉換資源文件的編碼方式為UTF-8。  回復  更多評論
            
          # re: 編碼討論---亂碼問題之終極解決 2006-06-12 14:18 Cisco
          pageEncoding是.jsp文件本身編碼
          contentType里面的charset是指服務器吐出的內容的編碼,也就是客戶瀏覽器所得到的內容的編碼。  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 东山县| 佳木斯市| 讷河市| 临高县| 峡江县| 许昌市| 鄱阳县| 洱源县| 麟游县| 中超| 都兰县| 汉阴县| 云梦县| 静海县| 拉孜县| 曲阜市| 东莞市| 绥芬河市| 南川市| 罗源县| 耒阳市| 新疆| 额尔古纳市| 隆尧县| 厦门市| 双桥区| 天等县| 绵阳市| 璧山县| 周至县| 民丰县| 镇巴县| 疏附县| 阿图什市| 邵阳市| 遂平县| 榆树市| 那曲县| 宁乡县| 泽州县| 丽江市|