很多人?特別是新手?做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"?/>
總結? 到這里?你應該徹底解決了亂碼了?嘿嘿? 寫的有點亂?還請高手們多指點?
|
|