乱码问题之终极解决
2008-01-05 10:38:01 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

核心提示: 多人 非凡是新手 做j2ee 项目中总能受困于 这样或那样的编码问题这里讨论下 新手学习,高手指教 一起研究下(以 tomcat MySQL 做例子 我推荐所有的编码采用utf-8)1 工程工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码
多人 非凡是新手 做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" />
[]
更多精彩
赞助商链接