为什么在linux上,response.sendRedirect还有问题?

hawaii 2002-01-24 09:30:59
我写了一个servlet,其中要将错误信息转发:
url = String url = "error?text=" + java.net.URLEncoder.encode("错误");
res.sendRedirect(url);

在error中,用URLDecoder.decode(text),即可得到中文。

这个servlet在win2000上正常工作,但在linux redhat 7.2中就不行。
我用了new String(str.getBytes(text), "ISO-8859-1","GB2312")等方法,但没有用。

结果地址栏中应当是B2%E2%CA%D4%D2%B3%C3%E6这样的串才对。
但现在是:????或是%3F%3F%3F%3F%3F%3F%3F%3F。

我的servlet engine是domino 5.09. linux redhat 7.2
jre是1.1.8,我把1.3的URLDecoder解压出来用了。

javac TestServlet.java -encoding GB2312
也用了。

而我如果是用一个href来实现,url = "error?text=...."。
linux下,在error中只需要用new String(str.getBytes(text), "ISO-8859-1","GB2312")转换即可。中文就好了。但这个sendRedirect有问题。

不知道是否和操作系统有关,我的redhat是英文,是不是需要汉化?

哪位高手指教。在下感激涕零!
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawaii 2002-01-24
  • 打赏
  • 举报
回复
skyyoung(路人甲): domino 5.09 jre 好像没法升级喔。
pengji(彭乃超):ok. let me try try see.
gzwrj(redwing):of course, i can use english error message. but is not friendly. And someone tell me can use the message map list, u just need send the message number. it's a solution, but not scalable. i don't want to do it this way. :(

多谢各位答复。
pengji 2002-01-24
  • 打赏
  • 举报
回复
好像在非中文系统中在URL后用中文参数会出错的,我曾在日文系统中试过,还望高手赐教!
建议:记得在JSP中URL后的中文可直接读出的(当然要在中文平台下)
首先你要搞清楚java.net.URLEncoder.encode()是把String转成什么编码了,如果是系统的(英文),那直接URLDecoder.decode(),new String(str.getBytes(text), "ISO-8859-1","GB2312")应该没问题的,但从你的显现看处理后String已经丢位了。所以很可能LINUX或domino 5.09的内部编码不是ISO_8859_1,所以你可以试试其他的编码方式:new String(str.getBytes(text), "?????","GB2312")“????”是其他的编码,如果成功通知我一声哦!
skyyoung 2002-01-24
  • 打赏
  • 举报
回复
是版本问题!
skyyoung 2002-01-24
  • 打赏
  • 举报
回复
升级JDK到1。2。2
gzwrj 2002-01-24
  • 打赏
  • 举报
回复
why u must using the chinese into the redirect URL.
Can u replace it with english.
hawaii 2002-01-24
  • 打赏
  • 举报
回复
好了。

在linux登录时选择中文,然后在sendRedirect之前用
new String(str.getBytes("GB2312"),"ISO-8859-1"),
接收页面用new String(str.getBytes("ISO-8859-1"),"GB2312")转换即可。
看来主要是操作系统的问题。

sender:
url = "error?text=" + java.net.URLEncoder.encode(new String(str.getBytes("GB2312"), "ISO-8859-1"));

receiver:
text = new String(URLDecoder.decode(str).getBytes("ISO-8859-1"), "GB2312");
或者:
text = new String(str.getBytes("ISO-8859-1"), "GB2312");

感谢大家答复。谢谢!
hawaii 2002-01-24
  • 打赏
  • 举报
回复
skyyoung(路人甲):
怎么升级?
我用的是domino 5.08, 5.09中的servlet engine.
jre是1.1.8. 我不知道怎么升级。可以升级吗?

那像原来我用websphere 2.0,它带jdk 1.1.6,我指定它的路径到jdk1.3,结果不行的。这些servlet engine的jre可以随便更换吗?

麻烦你答复我一下。谢谢!

62,628

社区成员

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

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