`
plane
  • 浏览: 160759 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JSP乱码解决 之 pageEncoding和contentType属性,UTF-8 GBK gb2312 详解

    博客分类:
  • java
阅读更多
文章来源于志伟教程资料网 (http://www.zhiweinet.com)。

UTF-8编码是什么?

UTF-8 编码是一种被广泛应用的编码,这种编码致力于把全球的语言纳入一个统一的编码,目前已经将几种亚洲语言纳入。UTF 代表 UCS Transformation Format.

UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度。UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符,才用以下编码规范:

左边第一个字节1的个数表示这个字符编码字节的位数,例如两位字节字符编码样式为为:110xxxxx 10xxxxxx; 三位字节字符的编码样式为:1110xxxx 10xxxxxx 10xxxxxx.;以此类推,六位字节字符的编码样式为:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。 xxx 的值由字符编码的二进制表示的位填入。只用最短的那个足够表达一个字符编码的多字节串。例如:

Unicode 字符: 00 A9(版权符号) = 1010 1001, UTF-8 编码为:11000010 10101001 = 0x C2 0xA9; 字符 22 60 (不等于符号) = 0010 0010 0110 0000, UTF-8 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA0



GBK编码是什么?

GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。 Microsoft简体版中文Windows 95就是以GBK为内码,又由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。

GB码,全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P- Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。

GB2312编码是什么?

GB2312-80(简称GB2312或GB80)的全称为《信息交换用汉字编码字符集—基本集》,由中国国家标准总局发布,于1981年5月实施。目前,通行于中国大陆和新加坡。

字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

JSP pageEncoding和contentType属性


JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。

关于JSP页面中的pageEncoding和contentType两种属性的区别:

pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页,用的是contentType。

第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。

第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。

JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。

第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效

contentType的設定.

pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。

jsp文件不像.java,.java在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码。一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。

但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。

举个例子:
<%@ page contentType="text/html;charset=utf-8" %>

大都会打印出乱码,因为我输入的“你好吗”是gbk的,但是服务器是否正确抓到“你好吗”不得而知。

但是如果更改为
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>



(责任编辑:志伟)

  转载请注明文章来源于志伟教程资料网 (http://www.zhiweinet.com)。
分享到:
评论

相关推荐

    JSP出现中文乱码问题解决方法详解.docx

    在JSP页面顶部声明`pageEncoding`属性,如`pageEncoding="UTF-8"`,以指定JSP页面的编码,这样IDE在保存时就不会报错。 总结,解决JSP中文乱码问题的关键在于理解不同环节的编码规则,并确保它们之间的一致性。从...

    AJAX乱码解决大全.doc

    ### AJAX乱码问题详解与解决策略 #### 编码基础概览 乱码问题往往源自于数据在传输过程中编码方式的不一致。在探讨AJAX乱码解决之道前,我们首先来了解一下几种常见的编码格式: - **UTF-8**:全球最广泛使用的...

    解决JSP乱码

    ### 解决JSP乱码问题详解 在Web开发过程中,特别是在使用Java Server Pages(JSP)进行页面渲染时,字符编码问题常常导致页面显示乱码。本文将详细探讨如何有效地解决JSP页面中的乱码问题,并提供一些实用的解决...

    JSP乱码解方案.doc

    《JSP乱码解决方案详解》 在Web开发中,JSP乱码问题一直是困扰开发者的一个常见问题。本文将深入探讨JSP乱码的产生原因及其解决方案,帮助开发者准确理解和处理各种可能出现的乱码情况。 首先,JSP乱码的产生主要...

    知识共享-jsp乱码处理精解(雷惊风).

    ### 知识点详解:JSP中的乱码处理 #### 1. 汉字编码问题概述 在Java Web开发中,尤其是使用JSP技术进行Web应用开发时,汉字编码问题是一个常见的挑战。主要体现在两个方面:一是表单提交数据时出现乱码,二是直接...

    jsp 字符换成中文

    - 在`&lt;%@ page %&gt;`指令中同时设置`contentType`和`pageEncoding`属性,且二者保持一致。 - 示例代码如下: ```jsp &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %&gt; ...

    Struts2乱码终极解决办法

    &lt;%@ page pageEncoding="UTF-8" %&gt; ``` - 如果使用的是GBK或其他编码,则需要将`UTF-8`替换为相应的编码类型。 ##### 2. 修改struts.properties文件 通过修改Struts2的核心配置文件struts.properties,可以全局...

    怎么解决JSP页面中文问题20100901

    在JSP文件中,可以通过声明`&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;`, 这一行指定了JSP文件本身的编码格式为UTF-8,即文件存储的编码。如果没有其他指定,则JSP编译后的Servlet也会使用该编码格式来读取...

    乱码的处理

    3. **GB2312/GBK/GB18030**:用于简体中文字符的编码,GB2312是最基础的版本,GBK和GB18030分别扩展了更多的汉字和符号。 4. **UTF-8/UTF-16/UTF-32**:统一多文种编码(Unicode)的实现方式,其中UTF-8因其高效性和...

    JSP和Servlet中的几个编码的作用及原理

    - 如果JSP文件使用的是GBK编码,但在JSP中设置了`pageEncoding="UTF-8"`,那么JSP内部定义的字符串可能会出现乱码。 - 当未指定`contentType` 且没有调用`response.setCharacterEncoding()` 方法时,`pageEncoding...

    Struts2zhogn乱码处理

    ### Struts2中乱码处理方法详解 #### 一、问题背景 在Web开发中,尤其是使用Java EE框架如Struts2进行项目开发时,字符编码问题常常困扰开发者。如果项目中的不同环节(如前端页面、后端处理、数据库存储等)采用...

    Java乱码问题解决

    ### Java乱码问题详解与解决方案 #### 一、问题背景 在Java开发过程中,尤其是在处理中文字符时,经常遇到字符编码不一致导致的乱码问题。由于Java默认使用Unicode编码,而在中国大陆地区,常见的字符集为GB2312...

    乱码问题的解决

    ### 乱码问题的解决及HTTP消息头详解 #### 一、引言 在Web开发过程中,经常会遇到文件下载时出现乱码的情况。这不仅影响用户体验,还可能导致数据丢失或错误解析。本文将深入探讨文件下载乱码问题的解决办法,并...

    JSP 传递中文参数的例子

    1. **字符集**:不同的系统和应用可能使用不同的字符集(如GBK、UTF-8等),这会导致中文显示乱码。因此,在传输过程中正确地指定字符集至关重要。 2. **URL编码**:URL中的特殊字符和空格需要进行编码才能被正确...

    jsp详细整理笔记

    3. 在设置 `contentType` 和 `pageEncoding` 属性时,要确保两者之间的一致性,避免出现乱码问题。 通过以上内容的学习,我们不仅可以更好地理解JSP的基本原理和使用方法,还能掌握如何在实际开发中高效地运用JSP...

Global site tag (gtag.js) - Google Analytics