飛艷小屋

          程序--人生--哲學(xué)___________________歡迎艷兒的加入

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
          編碼討論---亂碼問(wèn)題之終極解決

          很多人?特別是新手?做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"%>
          不要誤解?這句話不能保證你在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)?
          posted on 2006-06-16 14:02 天外飛仙 閱讀(333) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 其它
          主站蜘蛛池模板: 瓦房店市| 获嘉县| 武陟县| 宜丰县| 阳谷县| 德昌县| 巴林左旗| 屏东市| 鹤峰县| 天津市| 广州市| 花莲市| 怀柔区| 玉龙| 阜南县| 浏阳市| 南昌县| 凤台县| 原阳县| 清水河县| 德清县| 正镶白旗| 通化市| 大埔区| 申扎县| 灌云县| 黄浦区| 盐池县| 当阳市| 雷州市| 唐海县| 绥阳县| 黄大仙区| 京山县| 犍为县| 广南县| 江山市| 桃源县| 郴州市| 当雄县| 长武县|