免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3233 | 回复: 3
打印 上一主题 下一主题

Servlet字符编码问题的疑问[Linux] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-03 23:57 |只看该作者 |倒序浏览
具体地说,就是我写的servlet,无法正确捕捉GET方法提供的中文字符。
网上确实有很多这样的解决方案,我尝试过了,似乎不能解决我的问题。
Servlet的访问方法:
http://localhost:8080/apps/Test?nickname=小老鼠

在Servlet中,使用
String nickName = request.getParameter("nickname");
out.println(nickName );
打印的不是乱码就是问号。。。。很困惑

使用网上最为常用的解决办法,即
String nickName = new String(request.getParameter("nickname").getBytes("ISO-8859-1"));
不能解决问题,但是在Windows XP下可以正确显示中文的,而我的LINUX环境,却不能实现中文的正确显示,LINUX下,默认的字符编码是US-ASCII,Windows XP的字符编码是GBK.

有哪位老大帮忙看看具体什么原因呢?谢谢了,真着急.

论坛徽章:
0
2 [报告]
发表于 2007-11-04 03:03 |只看该作者
3.3 网页提交字符串

当页面中的表单提交字符串时,首先把字符串按照当前页面的编码,转化成字节串。然后再将每个字节转化成 "%XX" 的格式提交到 Web 服务器。比如,一个编码为 GB2312 的页面,提交 "中" 这个字符串时,提交给服务器的内容为 "%D6%D0"。

在服务器端,Web 服务器把收到的 "%D6%D0" 转化成 [0xD6, 0xD0] 两个字节,然后再根据 GB2312 编码规则得到 "中" 字。

在 Tomcat 服务器中,request.getParameter() 得到乱码时,常常是因为前面提到的“误解一”造成的。默认情况下,当提交 "%D6%D0" 给 Tomcat 服务器时,request.getParameter() 将返回 [0x00D6, 0x00D0] 两个 UNICODE 字符,而不是返回一个 "中" 字符。因此,我们需要使用 bytes = string.getBytes("iso-8859-1") 得到原始的字节串,再用 string = new String(bytes, "GB2312") 重新得到正确的字符串 "中"。
摘自:转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm

论坛徽章:
0
3 [报告]
发表于 2007-11-05 09:45 |只看该作者
把小白鼠放到text里做一下get提交,看看url变成什么了。似乎需要urlencode一下下~

论坛徽章:
0
4 [报告]
发表于 2007-11-05 10:10 |只看该作者
感谢楼上版主的关注和回复,我从IE和FF里直接写的链接,没有做URLEncoding,问题已经得到解决。只是,困惑还是存在的。
解决办法:
http://localhost:8080/apps/Test?nickname=小老鼠

Servet里,做如下操作:
String nickName = new String(request.getParameter("nickname").getBytes("ISO-8859-1"),"GBK");
可以正确显示昵称,即nickname的值。
——根据Regexlab站点上的文章,我想,原理是什么呢,应该是ASCII字节串能够转至ANSI字符串吧。但是,却不能直接转到UNICODE字符串。
这也正是我困惑的地方,莫非,都要先将ISO-8859-1字节串转至ANSI字符串吗?
那么,为什么我的程序统一使用UTF-8的编码,却也可以显示这个从ISO-8859-1编码转换来的GBK字符串呢?
当然,有可能的是,JAVA里,字符串统一使用UNICODE编码形式来存储以及表示,而ANSI编码是UNICODE编码的子集。

有哪位老大有着方面理解和知识的,还请多多指教了。
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP