在Java Web中setContentType与setCharacterEncoding中设置字符编码格式的区别
通用解释
setCharacterEncoding只是设置字符的编码方式
setContentType除了可以设置字符的编码方式还能设置文档内容的类型
详细区别
-
request.setCharacterEncoding(“utf-8”);
是设置从request中取得的值或从数据库中取出的值,
比如我在浏览器输入中文,在表单提交,浏览器是UTF-8编码,获取到的值在后台,如果你在代码中没有加上request.setCharacterEncoding(),输出格式又不是UTF-8的话,就会输出问好,加上设置编码的代码,就会输出正确的中文。
由此可得,request.setCharacterEncoding(“utf-8”)是设置请求的编码格式,让下面的代码知道requset中的数据要以什么编码进行解析。
-
response.setCharacterEncoding(“utf-8”);
由1可知,setCharacterEncoding是设置编码格式的,那requset和response的设置有什么区别,response的设置编码具体又有什么作用和体现呢?
response.setCharacterEncoding(“utf-8”)是设置HTTP响应的编码,是告诉服务器,响应里面的数据和信息现在是UTF-8格式,这时候响应被返回前端的话,直接用UTF-8解码,就可以显示出正确的中文数据。
-
response.setContentType(“text/html;charset=utf-8”);
response.setContentType(“text/html;charset=utf-8”)是用来告诉用户的浏览器或相关设备,如何显示将要加载的数据,或者如何处理将要加载的数据页面的编码方式的。
contentType的charset是指服务器发送给客户端时的内容编码。
因为浏览器很强大,你几乎返回什么他都能给你解析出来,比如图片,或者PDF,当然还有网页。
这一切的前提是你得告诉它你传的的是什么:
- 这时候就是第一个参数的作用:
text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。 - 第二个参数也是设置编码格式:
基本上和setCharacterEncoding是一个作用,我做过实验,在2中,我只设置setCharacterEncoding和只设置content-type前端都能正常显示,都不加就会显示乱码。
setCharacterEncoding和setContentType在字符设置上的优先级。
response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用 response.setCharacterEncoding指定的编码格式覆盖之前的设置。
就是response.setCharacterEncoding的优先级比setContentType高。
使用注意事项
与response.setContentType相同的是,调用setCharacterEncoding方法,必须在getWriter执行之前或者response被提交之前。
总之就是,先设置,再使用。