servlet编码问题

来源:互联网 发布:xyz域名怎么样 编辑:程序博客网 时间:2024/06/05 17:41

输出内容

在Servlet代码中用response的方法来设置输出内容的编码方式,有以下三个方法(转载):

  1、response.setCharacterEncoding("UTF-8");

  2、response.setContentType("text/html;charset=UTF-8");

  3、response.setLocale(new java.util.Locale("zh","CN"));

下面对以上3种方法进行差异分析:

      第一种方法只能用来设置out输出流中所采用的编码,但是它的优先权最高,可以覆盖后面两种方法中的设置;

      第二中方法可以设置out输出流中字符的编码方式,也可以设置浏览器接收到这些字符后以什么编码方式来解码,它的优先权低于第一种方法,  

但高于第三种方法;

      第三种方法只能用来设置out输出流中字符的编码方式,但是它的优先权最低,在已经使用前两种方法中的一个设置了编码方式以后,它就被覆盖而不起作用了。

以上方法都得在getWriter()方法前设置;

输入内容

在Servlet代码中设置取得参数的编码方式(学得):

1.对于doPost()方法,用request.setCharacterEncoding("utf-8")指定取得post的请求参数编码,而对于doGet()方法没有效果。

有一个问题是,如果form表单所在页面与setCharacterEncoding("utf-8")的编码不一样的话,也会出错!

2.对于doGet()方法,就麻烦点,方法如下(假设参数是value):(网上查的,不过如果直接在url上写参数就没成功,求高人指点)

第一种,查看tomcat下conf目录,找到server.xml,如果里面的

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"/>没有编码,则在servlet里用

response.setContentType("text/html;charset=utf-8");

String name=request.getParamenter("name");

name=new String(name.getBytes("ISO-8859-1"),"UTF-8");

这样就可以取得中文参数

第二种,如果server.xml里面的没编码,则添加上编码,然后一定要重启服务器如下

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="gb2312"/>

再在doGet()方法里设置输出编码即可response.setContentType("text/html;charset=utf-8")。



0 0