Servlet中的编码问题
对于response.setContentType()和response.setCharacterEncoding()的理解:
经过一些实践,对着两个方法有了一些自己的理解,有可能今后的学习中会发现自己现在得理解是错误的,到时候再改吧。
setCharacterEncoding()方法的作用是指定对服务器响应进行重新编码,与此同时,浏览器也会根据这个参数进行解码。所以,无论将此方法的参数设定为“UTF-8”还是“GBK”,浏览器均能正确显示中文。
如:
代码为
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//response.setContentType("text/html;charset=UTF-8");
浏览器显示如下:
代码为:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("GBK");
// response.setContentType("text/html;charset=UTF-8");
浏览器显示如下:
而setContentType()方法的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
由于对Tomcat的server.xml进行了修改,将其默认编码改为了UTF-8,如下:
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort=""
URIEncoding="UTF-8" />
(现在的理解,不一定正确)这就将服务器端的默认中文编码设定成了UTF-8,即在没有进行任何设置的情况下,编写的servlet程序中的汉字将用UTF-8的方式发送给客户端。我查到了eclipse浏览器的默认编码方式--GBK,如下图:
因此,若不使用setContentType()或setCharacterEncoding()进行设置,服务器将用UTF-8的编码方式向客户端发送数据,而浏览器将用GBK编码显示接收到的数据,这就会导致乱码。
但是!!!但是!!!并不是这样的!!!!
通过实践,终于懂得了正确的解释。
在eclipse中,工作区中的文字的编码类型就是上图红圈中所设置的类型。当选项选为GBK时,在不用setCharacterEncoding()方法进行设置时,eclipse 代码中传递的数据就会以GBK编码格式发送出去,此时若用setContentType()方法将浏览器显示编码设置为“GBK”,则不会出现乱码,如下:
代码为
request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
浏览器显示:
若用setContentType()将浏览器显示编码设为“UTF-8”则会出现乱码,如下:
代码为:
request.setCharacterEncoding("UTF-8");
//response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=UTF-8");
浏览器显示:
最后,我还是没弄清楚这两个方法同时使用为什么会导致“失效”,这有待进一步思考。
2017-10-01 22:08:34
Servlet中的编码问题的更多相关文章
- jsp/servlet中的编码问题
首先声明以下只是我个人的看法,有部分观点与网上人云亦云的观点不一样,不过凡事必恭亲,我还是相信自己测试的结果 推荐一个很好地URL编码详解http://www.ruanyifeng.com/blog/ ...
- Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)
在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...
- servlet中的字符编码过滤器的使用
一:简介 Servlet过滤器是客户端和目标资源的中间层组件,主要是用于拦截客户端的请求和响应信息.如当web容器收到一条客户端发来的请求 web容器判断该请求是否与过滤器相关联,如果相关联就交给过滤 ...
- JSP和Servlet中的几个编码的作用及原理
首先,说说JSP和Servlet中的几个编码的作用. 在JSP和Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8".contentType=& ...
- 理清Java中的编码解码转换
1.字符集及编码方式 概括:字符编码方式及大端小端 详细:彻底理解字符编码 可以通过Charset.availableCharsets()获取Java支持的字符集,以JDK8为例,得到其支持的字符集: ...
- JSP+Servlet中使用jspsmartupload.jar进行图片上传下载
JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...
- 在Servlet中出现一个输出中文乱码的问题(已经解)。
在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResp ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- JSP/Servlet 中的汉字编码问题
JSP/Servlet 中的汉字编码问题 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区 ...
随机推荐
- Unity中使用百度中文语音识别功能
下面是API类 Asr.cs using System; using System.Collections; using System.Collections.Generic; using Unity ...
- Document.write和 InnerHTML
Document.write 定义: Document.write()这种方法是将文本字符串写入document.open()打开的文档流. document.write()方法可以用在两个方面:页面 ...
- matlab 将数字矩阵转换成图像
MATLAB中,常常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算.在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型.如果直接 ...
- 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
package com.lanxi.demo1_8; import java.util.Iterator; import java.util.LinkedList; public class Test ...
- MIME 参考手册
本文摘自http://www.w3school.com.cn/media/media_mimeref.asp MIME (Multipurpose Internet Mail Extensions) ...
- CDN原理介绍(转)
内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服 ...
- 小程序 web-view 嵌套的网页跳转到小程序内部页面 实现无缝连接
需要在H5页面被作出判断和处理 点击事件发生时跳转到小程序内部页面 1.引入小程序提供的JS <script type="text/javascript" src=&quo ...
- JS 中的对象
对象就是一个由属性构成的无序列合集. var myObj = { name: ‘suki’, age: 21, interests: [‘guitar’, ‘tennis’] }; 属性是没有顺序的, ...
- RobotFramework Selenium2 关键字
*** Settings ***Library Selenium2Library *** Keywords ***Checkbox应该不被选择 [Arguments] ${locator} Check ...
- 微信小程序页面列表与详情页跳转的正确姿势
初学小程序,碰到列表与详情页跳转遇到的问题,记录一下. 一.问题 1个列表页: 1个详情页: 列表页代码: onLoad:异步查询数据并setData 详情页代码: 保存成功后,调用navigateB ...