编码讨论---乱码问题之终极解决

原创 2006年06月12日 11:34:00

很多人 特别是新手 做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" />

总结
到这里 你应该彻底解决了乱码了 嘿嘿
写的有点乱 还请高手们多指点

(本文作者:EasyJF开源团队  散仙 欢迎转载,转载请保留作者声明,谢谢!) 

相关文章推荐

MySQL终极配置解决UTF8编码出现的乱码问题

有人经常为MySQL存取数据涉及到的乱码感到烦心,其实解决这个问题非常简单。只需四步解决问题: 一、配置My.ini文件 [client] port=3306 default-characte...
  • zm2714
  • zm2714
  • 2012年09月13日 15:38
  • 15037

乱码问题终极解决方案

  • 2007年09月14日 15:06
  • 364KB
  • 下载

将mysql数据库设置成utf8编码时插入查询中文乱码终极解决方案

①这个问题是我偶然间发现的 org.apache.jasper.JasperException: /admins/userManagement.jsp(1,1) Page directive: ...
  • yang3wei
  • yang3wei
  • 2011年05月24日 23:17
  • 12809

URL汉字编码问题(及乱码解决)

  • 2013年05月19日 10:28
  • 295KB
  • 下载

JSP中文乱码问题终极解决方案

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解决其中的乱码问题。一、JSP页面中文乱码在...

JSP中文乱码问题终极解决方案

JSP中文乱码问题终极解决方案 在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解...

解决表单提交参数乱码问题【终极版】不看后悔

解决表单提交参数乱码问题【终极版】不看后悔 提交表单乱码问题,一直是困然网站开发人员的“吐血”问题,这问题虽说不痛不痒,但是绝对“恶心人”。之前自己遇到这个问题是,一直是能绕过就绕过,懒得理它,直到...

MYSQL中频繁的乱码问题终极解决

这个问题被问了好多遍了,干脆我写出来。 这个例子里用的编码是GB2312,如果你是其他的编码,修改GB2312为你自己的,比如UTF8 在MY.INI里添加: [mysql] default-ch...

JSP中文乱码问题终极解决方案(上)

本文首先介绍了一个JSP的源文件执行过程,即需要经过三个阶段,两次编码,才能完成一次完整的输出。特别需要注意的是,在这个过程中,编码问题贯穿始终。在JSP/Servlet中,主要有以下四种方式可以设置...

PHP 中使用JavaScript时,alert函数乱码问题,终极解决方案

案例:alert("用户名密码错误");然后如此。。。之前纠结很久,把页面中所有字符集的地方都改成了Utf8(注:GBK一般没这个问题),可是无用。。。有一种想改php.ini的冲动...不过还是想用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编码讨论---乱码问题之终极解决
举报原因:
原因补充:

(最多只允许输入30个字)