首先,我申明一下,我帮不到你什么。因为中文问题受很多东西的影响,光在这里说,没有真正见到系统,我是没法给你意见。这就像医生不给病人做望闻问切就没法确定病根一样。
我曾经花了很多时间来研究 Java 乱码的根本原因。可能是水平太差,根基太浅,我没有能最终找到问题的解决方案。虽然我知道乱码的起因,也积累了一些判断的经验,但是我还是没法预料在一个新的环境里,会发生什么样的情况。
所以,如果是使用我所熟悉的系统环境,如: Linux=en_US.iso885915,Oracle=ISO_8859_1,JSP charset=GBK,Tomcat4.* 那么我可以很顺利地使系统运行。但是换到新的环境,我相信很多人都需要做一个调整,区别可能也就是时间长短的问题。
========================================================
hecc 你说的情况我怎么觉得有些模糊:
一开始你说
"我们原来有一套在Linux 7.2, resin, apache, mysql 下的一个j2ee应用,它们的语言编码都是iso8859-1,对中文没有作任何的处理,中文进出数据库,显示都没有问题"
后来你又说:
我开发时对中文的处理都是,安装Linux是选中gb2312中文,编译Mysql时设定charset=gb2312,安装resin,apache,php,然后对中文就不用做任何处理了
我没法知道你们的系统是从哪个环境转移到 AIX+Oracle下?
=============================================================
最后说一些原则性的东东:
1.操作系统的环境设置,如 Unix 下的 LOCALE/LC_ALL 和 Windows 下的区域设置对 Java 字符结果会产生影响
2.数据库的字符集编码会产生影响(废话!!~_~)
3.数据库 JDBC 程序不同,结果也不一样(我有MySQL 和 SQL Server的经历)
4.不同的 Servlet Container 会产生不同的运行结果,主要原因可能是编译 jsp 文件时使用的 encoding 不同造成的。
5.Java 乱码产生的最重要原因是 JVM 内使用 Unicode 存贮数据。这是我个人对Java乱码产生机制分析后的结论。从JVM 外进入 JVM,使用了 InputStream, JVM 利用给定的 encoding 调用相应的 CharacterConveter 来将字符流转换成相应的Unicode.在输出的时候,也就是从 JVM 到 JVM 外的时候,使用 OutputStream, 按给定的 encoding 调用相应的 CharacterConverter 来转换字符,从 Unicode 转成相应的字符编码。如果在转入或者转出的环节上出现了给定的 encoding 不对的情况,那就会出现乱码。
这里还要注意,从 Java 转出来以后,外部系统也可能会对数据流做处理,这时,因为你从 Java 输入到外部系统的数据不符合外部系统的要求,又会产生乱码(我在 FileSystem 层次上遇到过这个问题)
还有其它的一些经验我就不一一列举了。
希望以上几条,特别是第五条能帮你找到你系统中乱码发生的节点。
Good Luck