很多人?特別是新手?做j2ee?項(xiàng)目中 總能受困于?這樣或那樣的編碼問(wèn)題
這里討論下?新手學(xué)習(xí),高手指教?一起研究下 (以?tomcat?mysql?做例子?我推薦所有的編碼采用utf-8)
1?工程 工程內(nèi)所有的?.java?.jsp?.xml?.txt?都有默認(rèn)的編碼?默認(rèn)的是系統(tǒng)環(huán)境的編碼 我們中文系統(tǒng)通常是GBK?推薦都采用utf-8? utf-8?的時(shí)候?你編譯?生成doc?可能會(huì)遇到亂碼(特別是采用ant?的時(shí)候,生成doc你幾乎100%會(huì)遇到)
解決方法?以ant?為例子 編譯?注意?encoding?參數(shù) <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?都有這個(gè)參數(shù) charset?指的是?生成?doc?后的編碼方式?javadoc?的參數(shù)
2?數(shù)據(jù)庫(kù) mysql?的編碼最復(fù)雜?從4以后?mysql?號(hào)稱(chēng)支持多編碼?它更靈活了?我們也更麻煩了 mysql?有4個(gè)級(jí)別的編碼? 系統(tǒng)級(jí) 庫(kù)級(jí) 表級(jí) sql語(yǔ)句級(jí) 請(qǐng)保持采用統(tǒng)一的編碼?推薦utf-8 其它數(shù)據(jù)庫(kù)要簡(jiǎn)單的多?一般都是一種編碼
3?web?server? tomcat?為例 tomcat?server.xml?中一個(gè)參數(shù) <Connectorport="8080"?maxHttpHeaderSize="8192" maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75" enableLookups="false"?redirectPort="8443"?acceptCount="100" connectionTimeout="20000"?disableUploadTimeout="true"?URIncoding="utf-8"/> 經(jīng)測(cè)試?這個(gè)URIncoding?參數(shù)主要是?get?方法中采用編碼
4?jsp?顯示層 第1條中說(shuō)明了?jsp?文件本身的格式 很多朋友采用eclipse?+myeclipse?生成jsp 它自動(dòng)生成一個(gè)頭<%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%> 不要誤解?這句話(huà)不能保證你在ie里看到的不是亂碼 pageEncoding它的意思是?這個(gè)頁(yè)面本身采用的是?utf-8?(似乎只在eclipse?里有效果?,我不確定) 為了在ie?里不亂碼??你還得加一句?<%@?page?contentType="text/html;?charset=UTF-8"%> 它不能在(myeclispe)自動(dòng)生成??推薦修改?myeclipse的模板?在下邊的目錄里 MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates 里邊的jsp模版?你加上<%@?page?contentType="text/html;?charset=${encoding}"%>
5?filter 自從tomcat?4?以后?網(wǎng)上就流傳了一個(gè)SetCharacterEncodingFilter?過(guò)濾器?搜一下有很多 很好用?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 然后部署的時(shí)候用?native2ascii?轉(zhuǎn)換? 這里給出?ant?里的例子 <native2ascii?encoding="utf-8"?dest="${web.dir}/WEB-INF/classes"?src="${src.dir}"?includes="**/*.properties"?/>
總結(jié)? 到這里?你應(yīng)該徹底解決了亂碼了?嘿嘿? 寫(xiě)的有點(diǎn)亂?還請(qǐng)高手們多指點(diǎn)?
|
|