一个关于 req.setChracaterEncoding(String) 的问题
举例子来说,一个浏览器向服务器发出了如下请求:这些请求以字节的形式发出(编码为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方式来解析。
以上我的两种说法,对吗?若是不对,错在哪里?