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

原创 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开源团队  散仙 欢迎转载,转载请保留作者声明,谢谢!) 

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

很多人 特别是新手 做j2ee 项目中总能受困于 这样或那样的编码问题这里讨论下 新手学习,高手指教 一起研究下(以 tomcat mysql 做例子 我推荐所有的编码采用utf-8)1 工程工程内所...
  • mengtech
  • mengtech
  • 2007年12月29日 06:59
  • 181

Tomcat处理乱码问题终极版

在Tomcat安装文件夹中,conf文件夹下,有server.xml文件,用notepad++之类可以修改xml的方式打开 在第70行左右的地方有:                connec...
  • a605135705
  • a605135705
  • 2017年06月20日 15:41
  • 133

Get请求,Post请求乱码问题解决方案

之所以出现乱码,主要是由于编码和解码采用的方法不同。 因此保证编码解码格式一致是避免乱码发生的重要前提。 问题背景:JavaWeb技术下,Tomcat作为容器,发送请求的时候出现乱码问题。...
  • u014424628
  • u014424628
  • 2015年09月07日 00:41
  • 8978

如何解决Java WEB应用中的乱码问题

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。   当我们通过Java程序员的视角来浏览网页时会发现:一方面用户端浏览器(IE或Firefox)以表单或链接的方...
  • darxin
  • darxin
  • 2009年12月19日 07:18
  • 8186

解决tomcat7中文乱码

修改tomcat7的conf/server.xml。
  • lisq037
  • lisq037
  • 2013年11月13日 09:06
  • 15047

java 中文乱码终极解决方案(斩草除根式消灭中文乱码恶魔)

前段时间公司做feinar旅行网后台管理系统的开发,我和我的同事都是第一次真正参与这种大型的项目开发,在开发过程中,我们也曾几次遇到中文乱码的问题,很是困惑和苦恼,到网上去查,那些所谓的解决方案都不凑...
  • Morecans
  • Morecans
  • 2007年07月15日 13:40
  • 2710

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀...
  • Molipc
  • Molipc
  • 2017年11月15日 12:45
  • 191

如何解决request对象中的乱码问题

当用request对象获取表单中的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须采取特殊处理,有 两种方式可避免request对象获取文字时的乱码问题。 解决方案一:只适应于po...
  • hry1243916844
  • hry1243916844
  • 2017年04月25日 20:17
  • 187

Filter应用之解决全站字符乱码问题

1 说明 乱码问题: l  获取请求参数中的乱码问题; Ø  POST请求:request.setCharacterEncoding(“utf-8”); Ø  GET请求:newString(...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2015年11月24日 11:07
  • 572

js、java编码(乱码)问题

一种方式 /* * 在前台要先双编,在后台取在解 * js代码 * var str = "中文"; * str = encodeURI(str); 1编 * str = e...
  • u011731439
  • u011731439
  • 2016年04月24日 10:13
  • 1621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编码讨论---乱码问题之终极解决
举报原因:
原因补充:

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