request.setCharacterEncoding 、response.setContentType、response.setCharacterEncoding

来源:互联网 发布:软件开发和软件研发 编辑:程序博客网 时间:2024/05/17 12:56

一、request.setCharacterEncoding()是设置从request中取得的值。
      指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso-8859-1编码。值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。而且,该指定只对POST方法有效,对GET方法无效。分析原因,应该是在执行第一个getParameter()的时候,Java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。
get方式需在Tomcat的server.xml中的:URIEncoding=”GBK” />) 加入URIEncoding=”GBK”,解决get请求乱码问题

二、response.setContentType(“text/xml;charset=GBK”)是设置页面中为中文编码
前者是设置动态文字(参数,数据库),后者设置页面静态文字

  • 字符流输出时:response.setContentType指定 HTTP 响应的编码(即指定字符流以什么编码方式输出),并同时通知客户端以什么字符解码显示。(做两件事)
  • 字节流输出时仅通知客户端解码方式(如果写了这条语句,那么response.setCharacterEncoding必须指定编码,并且与通知的客户端编码相同,否则会出现乱码)

三、response.setCharacterEncoding仅设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置。与response.setContentType相同的是,调用此方法,必须在getWriter执行之前或者response被提交之前

补充:
问题1 :从Jsp页面页面传递参数到Servlet显示中文乱码
解决办法:

如果是post 方法提交 则加入以下代码:
request.setCharacterEncoding(“GBK”);//注意首先保证编码一至,jsp页面用什么编码在此就用什么编码(GBK/GB2312等),此代码只对post提交方式有效
      response.setContentType(“text/xml;charset=GBK”)是设置页面中为中文编码

备注:以上两行代码必须放在PrintWriterout=response.getWriter(); 之前

get 方法提交如变量name 用String name = new String(request.getParameter(“name”).getBytes(“ISO-8859-1”),”GBK”);

问题2:解决get方式提交乱码问题:
修改tomcat server.xml 文件,加上如下部分代码

<Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443"              URIEncoding="GBK"/>

备注:以上字符编码格式根据自己需要设定,只要保持一致即可

0 0
原创粉丝点击