TOMCAT下的JIVE2的中文问题分析及解决

原创 2001年09月21日 18:12:00
TOMCAT下的JIVE2的中文问题的报告


原文摘自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文件的开始加上 &lt%@ page contentType="text/html;charSet=gb2312" %&gt 标签,中文就可以正确显示,因为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)添加&lt%@ page contentType="text/html;charSet=gb2312"%&gt到 /include/brankding/style.jsp 和 /admin/include/global.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应用的服务器端中文问题。

TOMCAT下的JIVE2的中文问题分析及解决

  • zgqtxwd
  • zgqtxwd
  • 2008年04月25日 22:17
  • 85

tomcat 宕机问题分析及解决

服务器环境:centos6.7 + tomcat7.0.69 + jdk1.7.0_55 + mysql5.6.28 场景:服务刚开始用户体验变差,请求时间长,之后出现404,500等与服务器交互失...
  • myspacedemen
  • myspacedemen
  • 2017年03月13日 09:59
  • 458

解决tomcat下不能访问中文文件夹下或中文文件名问题

今天也写这篇博客是因为我自己也遇到了这个问题,是做java开发的,前端用的是jsp,jsp中的编码是“utf-8”,但是在tomcat下却不能访问中文名称的文件,解决办法如下: 解决问题的核心在于修...
  • hsj1213522415
  • hsj1213522415
  • 2017年02月16日 18:29
  • 309

linux下解决tomcat中文乱码问题

在tomcat下的conf目录文件夹下server.xml文件中添加 useBodyEncodingForURI="true" 能很好的解决此类问题的发生。 useBodyEncodingForUR...
  • m0_37392489
  • m0_37392489
  • 2017年08月29日 17:49
  • 512

tomcat中存放含有中文的文件访问不到解决办法(设置Tomcat的UTF-8编码)

前言前两天做一个图片上传的功能,功能是挺简单但是上传成功以后,就是访问不到服务器上的图片,后来上传图片名称为英文却可以读取出来,于是乎百度一下,终于找到答案。本文参考:http://blog.csdn...
  • xinghuo0007
  • xinghuo0007
  • 2017年11月04日 13:24
  • 192

Tomcat 无法访问中文文件名的图片

发现中文文件名的文件无法下载、图片无法显示。 需修改 Tomcat 的 server.xml 文件,在 HTTP 的 里加个 URIEncoding="UTF-8" 就可以了。...
  • yaoye_1985
  • yaoye_1985
  • 2014年04月13日 22:03
  • 2916

解决Tomcat 不能下载带中文文件名的附件的方法

改tomcat的server.xml文件(这里是解决含有中文的文件、图片的不能下载、显示的问题): 1 "8080" maxThreads="150" minSpareThreads="25" ...
  • yuj9006
  • yuj9006
  • 2013年12月02日 12:12
  • 404

【Tomcat】无法显示中文命名图片,可以显示英文命名的图片问题

一、前言      在前一篇博客中向大家展示了如何向数据库导入图片、导入文件,请猛戳这里。      既然有上传就会有从服务器获取图片并且显示,小编遇到的问题是,同一个文件夹下的图片采用中文命名,无法...
  • kisscatforever
  • kisscatforever
  • 2016年12月28日 19:54
  • 1834

tomcat配置及中文乱码问题的解决方案

本文要解决的问题: 掌握tomcat的配置,同时解决使用过程中一系列的乱码问题。 tomcat中文乱码问题 一、Java中文问题的由来   Java的内核和class文件是...
  • sbq63683210
  • sbq63683210
  • 2016年07月07日 12:36
  • 7307

tomcat下中文的彻底解决[转]

tomcat下中文的彻底解决这些天开发一个项目,服务器是tomcat,操作系统是xp,采用的是MVC架构,模式是采用Facade模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多...
  • success_dream
  • success_dream
  • 2006年11月22日 09:46
  • 1535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TOMCAT下的JIVE2的中文问题分析及解决
举报原因:
原因补充:

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