TOMCAT下的JIVE2的中文问题分析及解决
来源:互联网 发布:tomcat8w java options 编辑:程序博客网 时间:2024/05/29 17:02
原文摘自JIVEsoft.com" target="_blank">JIVE论坛用户shyguy的帖子。
翻译者:cherami
XXX 注意 XXX:
所有的结论都是基于一下平台:
Winnt4.0(简体中文版) + Sun JDK1.3 + TOMCAT4.0-b7 + JIVE2.0.1 + mysql3.23.38 + org.gjt.mm.mysql.Driver-2.04
在这样的条件下,安装在TOMCAT下的JIVE2.0不能像其他JSP应用那样不做任何修改就可以正确的显示中文。我不敢确定但是几个测试的结果告诉我TOMCAT核心的编码总是8859_1,无论是否在双字节的操作系统下。当客户端输入一些中文,request.getParameter()请求返回的字符串是8859_1,因此如果你使用System.out.println()将输入打印到控制台,它看上去就像"??x?"。如果你在每个JSP文件的开始加上 <%@ page contentType="text/html;charSet=gb2312" %> 标签,中文就可以正确显示,因为TOMCAT知道它的内核编码是8859_1而输出到客户端的PrintWriter(它是JSP的输出对象)的编码是gb2312,因此PrintWriter在内部做了令人愤怒的8859_1到gb2312的转换。这就是为什么我们总是添加contentType解决中文问题的原因。
但是不幸的是,当我们通过JDBC从数据库提取字符串的时候事情就不一样了。
看看下面的虚拟的代码:str=rec.getString(field); 你能告诉我字符串str的编码吗?
答案是: gb2312!!!
(就像mysql jdbc驱动一样,很多包都根据平台返回字符串的编码,例如 SimpleDateFormat 和 JavaMail。)因此,当你将字符串传递到PrintWrite时,愚蠢的PrintWriter将再次使用8859_1-->gb2312的转换。可怜的客户端别无选择的看到丑陋的????。
令我困惑的是:
request.getParameter()的返回字符串的编码是8859_1,因此向控制台打印时它看上去像??x?,但是JIVE可以将字符串用gb2312编码存入数据库!!!
例如,在post.jsp里面,在消息创建发生以前,我将中文主题和内容输出到控制台,它看上去是??x?,但是在mysql数据库里面,SELECT * FROM JIVEMessage将返回正确的中文!
同时我也发现response.setLocale()对中文输出没有作用。
如何解决呢:
1. 在输出前使用String.getBytes()反向转换gb2312字符串,这是最愚蠢的方法。
2. 在英文平台下运行服务器。
3. 最最最最好的方法是: 使用其他的 java服务器!
对于TOMCAT用户的建议是:
如果你确实想在一个双字节的操作系统(例如简体中文版的Winnt)上运行TOMCAT,你最好:(1)添加<%@ page contentType="text/html;charSet=gb2312"%>到includerankdingstyle.jsp 和adminincludeglobal.jsp的第一行(路径是相对TOMCAT的主目录)
(2)反向转换从数据库返回的所有字符串为8859_1编码。这需要修改JIVE核心的所有DBxxxx类,
或者修改JDBC驱动的"result.getString()"进行反向转换,
或者修改TOMCAT内核中的"out"对象进行反向转换。
(3)如果你修改了TOMCAT内核中的"out对象,在将中文信息传递到JIVE/index.jsp时你最好使用URLEncode(/dir/URL.jsp?gb2312_msg)。
附:Rexip AppServer 有Record-Breaking Benchmark Results处理Java应用的服务器端中文问题。<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- TOMCAT下的JIVE2的中文问题分析及解决
- jive2.5的DB2部署,解决乱码及中文搜索问题
- 解决Tomcat下的中文乱码问题
- tomcat解决中文乱码问题及tomcat的配置
- Tomcat下中文问题的最有效及全面的解决教程
- Linux下Tomcat控制台输出及日志中文乱码问题的解决
- Linux下Tomcat控制台输出及日志中文乱码问题的解决
- tomcat中文问题的解决
- tomcat中文问题的解决
- Tomcat中文问题的解决
- tomcat中文问题的解决
- tomcat中文问题的解决
- tomcat中文问题的解决
- 解决tomcat下的中文提交乱码的问题!有效!
- 解决tomcat下的URL中文乱码问题的方法
- tomcat下htm中文页面乱码问题的解决
- linux 下,解决tomcat服务器接收中文乱码的问题
- Linux下Gitbook生成pdf及中文问题的解决
- Heritrix架构学习笔记(一)
- 调整(提高) Java I/O 性能
- 为什么凯明就不能倒闭?
- My Notebook
- 进攻java(写下来的目标)
- TOMCAT下的JIVE2的中文问题分析及解决
- java swing的drag and drop源程序
- Heritrix架构学习笔记(二)
- JAVA调试技术--基础
- 使用Swig封装C++到Python的心得--01
- 字符检测程序(上) 检测GB2312、BIG5...
- 图片新闻实现
- InsideJVM(4)-Heap(堆)
- Heritrix架构学习笔记(三)