一个关于 req.setChracaterEncoding(String) 的问题

JspStudent 2004-10-14 07:43:46
举例子来说,一个浏览器向服务器发出了如下请求:这些请求以字节的形式发出(编码为GBK)

GET /index.servlet HTTTP/1.0

user-agent : .......
accept : html/text;*/*
cookie : sessionid=dajkdjehq3893ehwoeri

name=李超
passwd=731137

第一,web服务器(如TOMCAT)将用什麽编码方式来解析收到的一系列字节?以默认的ISO-8859-1吧?也就是说,当服务器解析到“李超”的时候,只是简单的把“李超”编码的四个字节当成四个普通的ISO-8859-1字符来对待,将其转换成四个Unicode字符,存在req中与name属性相关联的字符串中。我说的对吗?


第二,现在我设置了:req.setCharacterEncoding("GBK")


服务器是不是仍以ISO-8859-1来解析收到的如下字节

GET /index.servlet HTTTP/1.0

user-agent : .......
accept : html/text;*/*
cookie : sessionid=dajkdjehq3893ehwoeri

name=李超
passwd=731137

并且以相同的方式生成存在于req中与name属性相关联的字符串。而后,当servlet调用req.setCharacterEncoding("GBK")方法时,就用如下方式:

String name=req.getParameter("name");
name=new String("name.getBytes("ISO-8859-1","GBK");

生成新的name属性的字符串,然候将新生成的字符串替换掉原先存储在req中与name属性有关的字符串。当servlet调用req.getParameter("name")时,就可以返回以正确方式解码并存储在字符串中的参数值了,我说的对吗?


毕竟我考虑到这样一个问题,当调用servlet时,WEB服务器早已分析好了HTTP的请求和参数。WEB服务器根本不会知道一个会有一个servlet将调用setCharacterEncoding("GBK")方法,也就是说,WEB服务器(TOMCAT)无法知道客户端发送的字节的编码方式,所以它只能以默认的ISO-8859-1方式来解析。

以上我的两种说法,对吗?若是不对,错在哪里?
...全文
85 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JspStudent 2004-10-15
up
回复
禽兽v5 2004-10-15
每个服务器实现都不同。看tomcat的源代码

或者... 楼下回答:)
回复
JspStudent 2004-10-15
cm4ever(小P)先生,我明白你说的意思,但我是想问一下,我的上述两种两种猜测是否正确(对于TOMCAT而言)。
有谁能回答?
回复
JspStudent 2004-10-15
up
回复
JspStudent 2004-10-15
UP
回复
禽兽v5 2004-10-14
另一贴子我也作了些回复。

1.web服务器不知道浏览器发送参数的字符集,所以编程的时候需要指定。

2.浏览器接收的时候,根据网页代码判断字符集,当然假设你用UTF-8输出,但是网页代码中却说是GBK,那输出的页面肯定乱码

更多请阅读http的规范
http://www.w3.org/Protocols/HTTP/HTTP2.html
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告