我的JSP论坛是乱码

galaxypilot 2003-07-11 01:18:50
本人做了一个JSP论坛,刚开始是在我的单机上运行,我的配置是TOMCAT4.0.4,ACCESS,jdk 1.4.2,一切都正常,后来把这个论坛挂在一个WEB应用下面,测试时输入中文显乱码,在单独情况下运行还是正常。<%@ page contentType="text/html;charset=gb2312" %>都有。谁帮我解决马上给一百分!
...全文
23 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
galaxypilot 2003-07-11
  • 打赏
  • 举报
回复
大家的回贴我已经打印出来了,留着慢慢研究。问题也解决了,其原因是这样的:我们的WEB应用是用MS SQL SERVER,考虑到安全问题,我的BBS用ACCESS数据库。我把应用数据库驱动包以级JAVABEAN和我的BBS(JDBC:ODBC桥)的BEAN放在同一个WEB-INF文件夹下,所以出现上述问题,后来我把我的BBS文件夹和我的WEB应用文件夹放到同级目录(tomcat的webapps目录下)各自都有自己的WEB-INF文件夹,问题就解决了。
这样就显得有点乱,有没有什么办法把我的BBS放到我的WEB应用目录下,同时让他们的bean文件没有冲突(我认为上述问题是由冲突引起的)
贴子我晚上结!
wangyanqiu 2003-07-11
  • 打赏
  • 举报
回复
精辟!
freezh 2003-07-11
  • 打赏
  • 举报
回复
好贴
hxzhappy 2003-07-11
  • 打赏
  • 举报
回复
对他进行编码就可以了,转化一下,你看看这个,希望对你有帮助!
public class TransFormat {

public static String GBToUnicode(String strIn) {

String strOut2 = null;

if (strIn == null || (strIn.trim()).equals(""))
return strIn;
try {
byte[] b = strIn.getBytes("ISO8859_1");
strOut2 = new String(b, "GB2312");
} catch (Exception e) {
}
return strOut2;
}
public static String unicodeToGB(String strIn) {

byte[] b;
String strOut = null;

if (strIn == null || (strIn.trim()).equals(""))
return strIn;
try {
b = strIn.getBytes("GB2312");
strOut = new String(b, "ISO8859_1");
} catch (UnsupportedEncodingException e) {
}
return strOut;
}
}

dgnApo 2003-07-11
  • 打赏
  • 举报
回复
jsp里面用 request.setCharacterEncoding("gb2312");
galaxypilot 2003-07-11
  • 打赏
  • 举报
回复
哈哈,存入数据库中的数据也不算乱码,就是几个问题,大家给的解决办法很多,但我不知道用那个来解决我的问题更合适。
CoolAbu 2003-07-11
  • 打赏
  • 举报
回复
对输入的汉字进行处理再存入数据库 ;)
mingjob 2003-07-11
  • 打赏
  • 举报
回复
现在b.jsp只要这样就行了
----------------
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="com.zms.test2.*" %>
<html><head>
}
public static String getParameter(HttpServletRequest request,String key)
return getParameter(request,key,"ISO-8859-1","GBK");
}
}
将其编译,放入WEB-INF\classes目录下
现在b.jsp只要这样就行了
----------------
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="com.zms.test2.*" %>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head><body>
<%=Util.getParameter(request,"text")%>
</body></html>
----------------
是不是很简单,轻松解决提交时的乱码问题

zms说:提交时产成的乱码解决就是字符串编码的转换,关键是用
new String(origin.getBytes(from),to)来解决
其实读写数据库产生的乱码也可以用这种办法来解决,只要你掌握其原理,就
不会被乱码问题难倒了。
梦幻圣者 2003-07-11
  • 打赏
  • 举报
回复
在你的JSP页面中加一段request.setCharacterEncoding("GBK");然后解析请求数据就应该没有乱码了。
mingjob 2003-07-11
  • 打赏
  • 举报
回复
a.jsp
----------------
<%@ page contentType="text/html;charset=GBK" %>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head><body>
<form action="b.jsp" method=post>
<input type=text name=text><input type=submit value="提交">
</form>
</body></html>
----------------
b.jsp
----------------
<%@ page contentType="text/html;charset=GBK" %>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head><body>
<%=request.getParameter("text")%>
</body></html>
----------------
a.jsp上有个文本框,输入几个中文字,提交到b.jsp
可以看到,是乱码,但不是很乱,都是?号
其实这种乱码解决起来很简单
这是因为提交的内容是ISO-8859-1编码,只要将其转换为GBK编码就行了
修改b.jsp为如下内容
----------------
<%@ page contentType="text/html;charset=GBK" %>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head><body>
<%=new String(request.getParameter("text").getBytes("ISO-8859-1"),"GBK")%>
</body></html>
----------------
哈哈,乱码不见了

上面的解决没有考虑request.getParameter为null的情况,而且语句稍显罗嗦
我编了一个Util类,代码如下

package com.zms.test2;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
public class Util {
public static String getParameter(HttpServletRequest request,String key,
throws UnsupportedEncodingException {
String value=request.getParameter(key);
if(value==null) {
return "";
} else {
return new String(value.getBytes(from),to);
}
}
public static String getParameter(HttpServletRequest request,String key)
return getParameter(request,key,"ISO-8859-1","GBK");
}
}
将其编译,放入WEB-INF\classes目录下
mingjob 2003-07-11
  • 打赏
  • 举报
回复
2.修改jsp,加入两段内容,如下所示:
<%@ page contentType="text/html;charset=GBK" %>
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head><body><center>
现在是:<%=new java.util.Date()%>
</center></body></html>

3.重新启动Tomcat,再浏览刚才的jsp文件,发现乱码不见了。

总结:共修改了三个地方
1.conf\web.xml中加了一个javaEncoding参数,值为GBK
2.jsp文件开头加入<%@ page contentType="text/html;charset=GBK" %>
3.html的<head></head>中加入
<meta http-equiv="Content-Type" content="text/html;charset=GBK">

注意:zms发现修改了那个javaEncoding参数后,Tomcat可能会修改你的jsp文件!?
所以在试验前要备份你web app。

zms说:总结的第三步不一定是必须的,但zms建议你总是加上。

现在jsp中的乱码解决了,Servlet还是有问题,如下显示的Servlet的doGet函数
显示还是乱码

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html><head></head><body>现在是:"+new java.util.Date()+"</body></ht
out.flush();
}

现在我们有了前面的经验,将其修改为如下所示,乱码问题得以解决

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
response.setContentType("text/html;charset=GBK");
out.print("<html><head>");
out.print("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GBK\">"
out.println("</head><body>现在是:"+new java.util.Date()+"</body></html>");
out.flush();
}

现在显示乱码的问题基本解决了,但是你大概不知道,Post提交时也会产生乱码
如下面两个jsp所示:
mingjob 2003-07-11
  • 打赏
  • 举报
回复
转贴自SMTH BBS java版zms的帖子:

zms说:以下试验在平台Win2k server中文版+Tomcat 4.1.24上通过

你已经开始深入学习jsp和Servlet技术了,但是不久就发现了一个问题
中文总是有问题,即使是一个简单的jsp,如
<html><head></head></head><body><center>
现在是:<%=new java.util.Date()%>
</center></body></html>
其中的中文也不能正常显示。

关于乱码产生的原因,zms在这里不想多说了,只想说的一点是

jsp--java文件
java文件--class文件
class文件执行--产生结果
浏览器解释执行的结果
这四个转换过程中都有可能出现乱码,但据zms试验,主要问题在jsp--java
这一步,这可以从查看生成的java文件看出。Tomcat将jsp转换成servlet的
java文件在Tomcat安装目录的work目录下的相应子目录,你可以看一下。
其中浏览器解释执行也可能出现问题,但这个问题IE自己就能摆平
IE--查看--编码--简体中文(GB2312)
就行了,当然也可以程序控制的方法让IE能正确解释。

下面zms不加解释的介绍解决的步骤

1.修改Tomcat目录下conf\web.xml文件
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
增加一段,如下面蓝色部分所示
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>javaEncoding</param-name>
<param-value>GBK</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
galaxypilot 2003-07-11
  • 打赏
  • 举报
回复
在线等待,分数不够可以再加!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧