字符编码与JSP学习笔记

一些基本概念

字符集(Character):
一系列抽象字符(可以是各种国家的文字、符号、数字等等)的集合。

常见字符集名称:
ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。

编码规则(Character Encoding):
将字符集与另一类信息集合互相对应起来的法则(在这里对应的是计算机中的数字代码)。
每种字符集都有相应的(一个或多个)编码规则。
计算机要准确的处理各种字符集文字,就需要按照相应的编码规则进行转换,以便计算机能够识别和存储各种文字。

编码与解码:
计算机中储存的信息都是用二进制数表示的数字代码(都是0和1),
而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。
这之间存在着"编码"、"解码"的过程。
按照某种编码规则将字符转换成二进制数字代码存储到计算机中,称为"编码"。
反之,按照某种编码规则将存储在计算机中的二进制数字代码解析成对应的字符显示出来,称为"解码"。

乱码的发生:
在解码过程中,如果使用了与编码时不一致的编码规则,就会导致最后显示的内容出现乱码。

文本编辑软件(这里指带有文本编辑功能的软件)和编码规则

文本编辑软件在保存文本内容的时候一般都是根据系统默认的编码规则来进行编码的。
文本编辑软件在读取内容的时候一般都是根据所读取的内容来推测其编码规则,
并以此编码规则来进行解码和显示。
但是有时会出现推测不准确的现象,导致显示出来的内容是乱码。
也有不少文本编辑软件可以指定打开文本时所使用的编码规则。

JSP、html文件和编码规则

静态网页html中一般都会有
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
这么一段话。
其中的“charset=ISO-8859-1”用来告诉浏览器以什么编码规则来解码显示网页内容。
静态网页html显示乱码:
如果html文件中的“charset”和html文件实际使用的编码规则不一致,就会出现乱码。

动态网页JSP中一般都会有
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
这么一段话。
其中“pageEncoding”告诉web服务器这个jsp文件编写时使用的是什么编码规则。
“contentType charset”用来告诉浏览器以什么编码规则来解码显示网页内容。
如果“pageEncoding”和“contentType charset”都没有设定的话,那么两者都会默认使用“ISO-8859-1”。
如果“pageEncoding”和“contentType charset”其中有一个指定的话,那么另一个也一样。
一个JSP的源文件需要经过三个阶段,才能完成一次完整的输出。
第一阶段:从JSP到Servlet(.java文件)
Web服务器会根据“pageEncoding”的设定解码读取JSP,再翻译成统一的UTF-8 JAVA源码(即.java)。
第二阶段:从Servlet文件(.java)到Java字节码文件(.class)
此过程是由JAVAC命令完成的,主要是将(.java)的源文件翻译成JVM可识别的Java字节码文件(二进制码文件)。
整个过程都是UTF-8编码规则下进行的。
第三阶段:从Web服务器到浏览器
Web服务器将第二阶段之后得到的Java字节码根据“contentType charset”进行转换并输出到浏览器。
浏览器再根据“contentType charset”解码显示。
动态网页JSP显示乱码:
如果JSP文件中的“pageEncoding”和其实际使用的编码规则不一致,就会出现乱码。
如果JSP文件中的存在其“contentType charset”不支持的字符,最后显示时也会出现乱码。

以上。如果有不对的地方,请高手帮忙指正,谢谢!

时间: 2024-10-10 23:13:13

字符编码与JSP学习笔记的相关文章

Filterpost请求中文字符编码的过滤器 --学习笔记

java代码: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Lo

Servlet&JSP学习笔记

Servlet&JSP学习笔记 */--> Servlet&JSP学习笔记 Table of Contents 1 Web容器 2 内置对象 2.1 内置对象分类 2.1.1 out 2.1.2 request 2.1.3 application 2.1.4 response 2.1.5 session 2.1.6 其他 3 JavaBean 3.1 JSP动作元素 3.2 javabean的四个作用於范围 4 JSP状态管理 4.1 Cookie 4.2 include 指令与动作

Servlet&amp;Jsp学习笔记归纳图(一)

转载请注明出处!!!版权必究!! 以下是Servlet&Jsp的学笔记归纳图,详细内容以及相关代码会在后面整理完成 后给出 使用的是思维导图工具:MindManager 6 最新版本是2013,有兴趣的自己百度下载,功能更多,安装有点麻烦 以下提供版本6绿色版免安装版下载: http://pan.baidu.com/s/1jGqlnXc 本节思维导图文件下载:http://pan.baidu.com/s/1eQGbMSU Servlet&Jsp学习笔记归纳图(一),布布扣,bubuko.c

JSP学习笔记(1)-JSP语法

1.JSP页面的基本结构 (1)HTML标记符(2)JSP标记(3)变量和方法的声明(4)Java程序片(5)Java表达式 2.变量和方法的声明 成员变量和方法 语法:<%! 变量.方法%>成员变量占用的内存知道JSP引擎关闭才释放: 局部变量和方法 语法:<% 变量.方法%>当一个线程将Java程序片执行完毕,运行该线程的Java程序片的局部变量释放所占的内存: 比较 当客户请求时,JSP引擎为客户分配一个线程,JSP页面中的成员变量共享,如果对成员变量进行操作,必然会影响到其

JSP学习笔记--内置对象

1. JSP内置对象分类 (1)application:javax.servlet.ServletContext的实例,该实例代表JSP所属的WEB应用本身,可用于JSP页面,或者Servlet之间交换信息.常用的方法有getAttribute(String attName), setAttribute(String attName,String attValue)和getInitParameter(String Param)等. (2)config:javax.servlet.ServletC

Servlet&amp;JSP学习笔记:第一个Servlet程序

第一个Servlet程序代码如下,接着根据这个小程序逐步讲解. import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq

重温JSP学习笔记--三大指令九大内置对象

最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: page    ------>最复杂的一个指令,属性很多,常用的像import,language,pageEncoding等等 include-------->静态包含,一般在一个网站不同网页上把相同的元素单独写在一个jsp中,其他页面直接用该命令导入,能大大减少重复代码提高访问速度 tagli

JSP学习笔记(三):解决JSP中文乱码问题

JSP开发应用过程中中文乱码是个比较常见的问题,其根源是:Web容器默认的字符编码格式是ISO-8859-1. 一.ISO-8859-1是不支持中文的.假如在保存JSP页面源码时遇到该错误,只要把JSP命令标签中的键值对"pageEncoding"的值ISO-8859-1改成"utf-8"(或UTF-8),当然是建议改成这样的编码格式,也可以改成GBK.这样就可以顺利保存源代码了. 二.get和post提交表单时遇到中文乱码问题的解决方案: (1)post提交:po

JavaWeb 后端 &lt;五&gt; 之 JSP 学习笔记

一.JSP简介 1.也是SUN公司推出的开发动态web资源的技术,属于JavaEE技术之一.由于原理上是Servlet, 所以JSP/Servlet在一起. 二.HTML.Servlet和JSP 1.HTML:静态页面,不能包含java代码,只能有HTML有关的标记 2.Servlet:写java代码,做页面的输出,不是很方便(开发效率很低) 3.JSP:HTML+java 三.输出当前的时间 <%@ page language="java" import="java.