如题:看到一些贴子上说浏览器根据应答头中的charset,以及网页<meta 元素中指明的charset来对form中的内容进行编码。
但是我认为浏览器是统一用iso8859-1进行的编码然后发往服务器。
否则,为何我的很多指定了gb2312的页面在提交参数后,我还要如此编码解码才能得到正确的汉字内容?
String s=request.getParameter("name");
if (s !=null){
s = new String(s.getBytes("iso8859-1"),"gb2312"));
}
这说明浏览器发送信息时候并没有按页面中的<meta 元素中指明的charset指定的gb2312编码然后再发,而是使用的iso8859-1
对否?
大家来评论评论

解决方案 »

  1.   

    meta里指定的是浏览器用什么编码来呈现。
      

  2.   

    charset是设定本页面的编码
    你传到别的地方就不是按这个编码了,那是那java默认的编码进行传输的
    要在request.setCharacterEncoding("GB2312");
    s = request.getParameter("xx");
    就不需要转了
      

  3.   

    >否则,为何我的很多指定了gb2312的页面在提交参数后,我还要如此编码解码才能得到正确的汉字内容?那些贴子说得对,不应该怀疑。之所以要 new String(s.getBytes("iso8859-1"),"gb2312")); 是因为应用服务器的原因,并不总是需要这么做。有时需要这么做,表明所使用的应用服务器需要你这么做。而有些应用服务器就不需要这么做。
      

  4.   

    response中的charset是服务器通知输出流时的编码;
    meta中的charset是浏览器展示页面时的编码;
    在交互中request中提交的参数按着meta中的charset编码,所以服务器端读取的时候需要按着这个charset进行编码处理.
      

  5.   

    ”你传到别的地方就不是按这个编码了,那是那java默认的编码进行传输的”这个话我看不懂。浏览器收到信息后,怎么会再传到别的地方坭?请问是指的:从哪个地方传到别的地方?别的地方是指的什么地方。
    兄弟俺愚顿,希望大家给我明确几点:
    meta里指定的是浏览器用什么编码来呈现,这个我深信不疑。
    但是,1:浏览器往服务器发送信息时候是按照哪个地方(应答头里的content-type,还是meta里的内容)来选择采用哪种编码方式?
          2:或者浏览器根本无需选择,一律用iso8859-1来发送?
          3:如果浏览器是按照应答头中的指示或者meta的指定来采用某个编码方式,之所以我需要
    String s=request.getParameter("name");
    if (s !=null){
    s = new String(s.getBytes("iso8859-1"),"gb2312"));
    }
    ,是因为服务器(某些,可能有些不是这样的),在我request.getParameter("name");之前就统一用iso8859-1对浏览器发过来的东东进行了一次转换(尽管不是俺所需要的转换),所以才导致我又要来一转换?
    谢谢