Jsp与Servlet 编码问题

1.编码格式:

ServletRequest
setCharacterEncoding(String env) throws java.io.UnsupportedEncodingException
重写此请求正文中使用的字符编码的名称。必须在使用 getReader() 读取请求参数或读取输入之前调用此方法。否则,此方法没有任何效果。
env 包含字符编码名称的 String。
Throws java.io.UnsupportedEncodingException: 如果此 ServletRequest 仍然处于可以设置字符编码的状态,但指定编码无效

ServletResponse
setCharacterEncoding(String charset)
设置将发送到客户端的响应的字符编码 (MIME charset),例如,将它设置为 UTF-8。如果已通过 #setContentType 或 #setLocale 设置了字符编码,则此方法将重写该字符编码。用 text/html 的 String 调用 #setContentType 并用 UTF-8 的 String 调用此方法等效于用 text/html; charset=UTF-8 的 String 调用 setContentType。
可重复调用此方法来更改字符编码。如果在已调用 getWriter 之后或者在已提交响应之后调用此方法,则此方法没有任何效果。

容器必须让客户端了解将用于 servlet 响应的 writer 的字符编码,如果协议提供了实现上述操作的方法。在使用 HTTP 的情况下,字符编码是作为文本媒体类型的 Content-Type 头的一部分传送的。注意,如果 servlet 未指定内容类型,则字符编码不能通过 HTTP 头传送;但是,它仍然用于编码通过 servlet 响应的 writer 编写的文本。

setContentType(String type)
设置将发送到客户端的响应的内容类型,如果该响应尚未提交。给定内容类型可能包含字符编码规范,例如 text/html;charset=UTF-8。 如果在调用 getWriter 之前调用此方法,则只根据给定内容类型设置响应的字符编码。
可重复调用此方法来更改内容类型和字符编码。如果在已提交响应之后调用此方法,则此方法没有任何效果。如果在已调用 getWriter 之后或者在已提交响应之后调用此方法,则该方法不会设置响应的字符编码。

容器必须让客户端了解用于 servlet 响应的 writer 的内容类型和字符编码,如果协议提供了实现上述操作的方法。在使用 HTTP 的情况下,使用 Content-Type 头。

<%@ page language=“java” contentType=“text/html; charset=UTF-8” import="com.User." pageEncoding=“UTF-8”%>*
第一阶段:将jsp编译成Servlet(.java)文件。用到的指令是pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将JSP文件编译成.java文件时会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8编码的JAVA源码(即.java)。
第二阶段:从Servlet文件(.java)到Java字节码文件(.class),从UTF-8到UTF-8。在这一阶段中,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。JAVAC用UTF-8的encoding读取java源码,编译成UTF-8编码的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。这一过程是由JVM的内在规范决定的,不受外界控制。
第三阶段:从服务器到浏览器,这在一过程中用到的指令是contentType。服务器载入和执行由第二阶段生成出来JAVA二进制码,输出的结果,也就是在客户端可见到的结果,在这次输出过程中,由contentType属性中的charset来指定,将UTF8形式的二进制码以charset的编码形式来输出。如果没有人为设定,则默认的是ISO-8859-1的形式。

从以上过程可知:
pageEncoding :说明jsp内容的编码。
contentType:设置JSP源文件和响应正文的字符集编码及MIME类型, contentType的charset是指服务器发送给客户端时的内容编码

此段转自:https://www.cnblogs.com/xing1/p/7902523.html

meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”
html编码格式 指定当前页面的 MIME 为 text/html,字符集为 UTF-8。
MIME 是用来告诉浏览器以何种方式解析该文档,除了 text/html,还可以是 text/plain、text/xml 等等。

在tomcat配置文件server.xml中加入 URIEncoding = “UTF-8” ,从根本上解决tomcat编码问题
Connector port=“8080” protocol=“HTTP/1.1”
connectionTimeout=“20000”
redirectPort=“8443”
URIEncoding = “UTF-8”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值