编码讨论-乱码问题之终极解决
【IT168 技术文档】
很多人,特别是新手, 做j2ee 项目中总能受困于这样或那样的编码问题 。这里一起研究下 (以 tomcat mysql 做例子 我推荐所有的编码采用utf-8) 。
1 工程
工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码
我们中文系统通常是GBK ,推荐都采用utf-8,采用utf-8 的时候,你编译生成doc 可能会遇到乱码(特别是采用ant 的时候,生成doc你几乎100%会遇到)
解决方法 (以ant 为例子 )
编译 注意encoding 参数
2 数据库
mysql 的编码最复杂,从4以后mysql 号称支持多编码,它更灵活了,我们也更麻烦了
mysql 有4个级别的编码
系统级
库级
表级
sql语句级
请保持采用统一的编码, 推荐utf-8 。 其它数据库要简单的多, 一般都是一种编码 。
3 web server (tomcat 为例 )
tomcat server.xml 中一个参数
4 jsp 显示层
第1条中说明了jsp文件本身的格式 ,很多朋友采用eclipse +myeclipse 生成jsp ,它自动生成一个头
自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多很好用 web.xml 中加入
首先保证文件本身是utf-8 ,然后部署的时候用 native2ascii 转换。这里给出 ant 里的例子
到这里 你应该彻底解决了乱码了,写的有点乱,还请高手们多指点 。
1 工程
工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码
我们中文系统通常是GBK ,推荐都采用utf-8,采用utf-8 的时候,你编译生成doc 可能会遇到乱码(特别是采用ant 的时候,生成doc你几乎100%会遇到)
解决方法 (以ant 为例子 )
编译 注意encoding 参数
生成doc 注意encoding 和charset<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>
这里的encoding 就是指的你 java 文件的编码格式javac 和javadoc 都有这个参数 ,charset 指的是生成doc 后的编码方式 javadoc 的参数<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>
2 数据库
mysql 的编码最复杂,从4以后mysql 号称支持多编码,它更灵活了,我们也更麻烦了
mysql 有4个级别的编码
系统级
库级
表级
sql语句级
请保持采用统一的编码, 推荐utf-8 。 其它数据库要简单的多, 一般都是一种编码 。
3 web server (tomcat 为例 )
tomcat server.xml 中一个参数
经测试 这个URIncoding 参数主要是 get 方法中采用编码<Connectorport="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/>
4 jsp 显示层
第1条中说明了jsp文件本身的格式 ,很多朋友采用eclipse +myeclipse 生成jsp ,它自动生成一个头
不要误解 这句话不能保证你在ie里看到的不是乱码 ,pageEncoding它的意思是 这个页面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ,我不确定) ,为了在ie 里不乱码 你还得加一句<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
它不能在(myeclispe)自动生成 推荐修改 myeclipse的模板 在下边的目录里 MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates 里边的jsp模版 你加上<%@ page contentType="text/html; charset=UTF-8"%>
5 filter<%@ page contentType="text/html; charset=${encoding}"%>
自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多很好用 web.xml 中加入
6 资源文件<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>
首先保证文件本身是utf-8 ,然后部署的时候用 native2ascii 转换。这里给出 ant 里的例子
总结<native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes"
src="${src.dir}" includes="**/*.properties" />
到这里 你应该彻底解决了乱码了,写的有点乱,还请高手们多指点 。
0
相关文章
