一个关于 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方式来解析。

以上我的两种说法,对吗?若是不对,错在哪里?
...全文
108 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

81,122

社区成员

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

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