web开发java中文编码问题

转载 2012年03月29日 09:48:22
关于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所对应的编码,比如中国大陆就是GBK,台湾就是BIG5或者MS950。而一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。

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

举个例子:

<%@ page contentType="text/html;charset=utf-8" %>

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

但是如果更改为

<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>

这样就服务器一定会是正确抓到“你好”了。

要是简单的说作用范围

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
只适用于HTML,即在 HTML 中设置页面的编码方式
如果被访问的是一个静态的 HTML 页面。可以通过以上方式来设置页面的编码方式。

对于 <%@ page language="java" contentType="text/html; charset=utf-8" >
上面已经说的比较清楚了
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是以前写的东西,感觉理解还是有点偏差:
用户浏览器输入过程 :<系统默认编码,Windows下的话为GBK(相当于gb2312,gb2312为其子集)>,用户输入的字符编码为系统默认的。
浏览器代码到web容器 :默认web容器以iso-8859-1来读入这个输入流。相当于getBytes("iso-8859-1")
所以要在java代码中正确显示字符集要使用
Java代码
  1. request.setCharacterEncoding("GBK");   
  2. //相当于new String(req.getParameter("name").getBytes("iso-8859-1"),"gbk"),但是如果这样设置后,jsp代码中要加入<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>  
 
web容器到浏览器
如果不设置page,默认为以iso-8859-1编码读入流输出到web容器。但是设置时设置
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>编码总是用问题,
设置成<%@ page language="java" import="java.util.*" pageEncoding="ISO8859_1"%>就没问题了。
page的作用是让web容器按pageEncoding设置的编码读入流输出到浏览器,这里要和mate中的区别开来,mate是用来告诉浏览器用什么编码来显示。

注:这里的page是指<%@ page language="java" import="java.util.*" pageEncoding="×"%>

相关文章推荐

response、request对象-中文问题,web开发中的地址问题,生成验证码,表单获取信息,url地址编码,request的请求转发

1、简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。 request和response对象即然代表请求和响...

Java web开发中的编码问题

经常在web开发中碰到中文乱码的问题,一般都是局部性的解决了问题之后就不了了之了。前些天在开发一个小程序,又碰到了中文乱码的问题,于是下定决心彻底解决这个问题。经过了2天的时间,在网上搜索了一些信息,...

java web开发编码集(乱码)问题

本文主要参考了以下书籍,第三章 深入分析java web 中的中文编码问题,如果已经看了这本书,基本可以不用看这篇文章了,当然如果搜到这个文章,说明你应该也没看这本书,^_^: **一、介绍** ...

Java WEB开发中的中文乱码问题解决之终极之道

Java WEB开发中的中文乱码问题解决之终极之道 JavaWebServletJSP浏览器  [size=medium]每一个JAVA WEB开发者都会碰到乱码问题。本文阐述了JAVA WEB...

解决Java Web开发中Jsp存储读取MySQL数据中文乱码的问题

MySQL虽说好用,但很容易出现中文乱码的问题,以下列出Java Web开发中常见的几种中文乱码问题: 1、JSP页面显示问题 2、存入MySQL数据中文乱码 3、读取MySQL数据...
  • miniapp
  • miniapp
  • 2011年10月27日 10:57
  • 4629

就Java Web开发中文乱码问题讨论

我们在生活中会遇到种种问题,但是我们都会尝试着去解决它并从中获取经验;在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱...

java web开发时表单提交引起的一些中文乱码问题

1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。  2、contentType="text/html;charset=UTF-8"的作用是指定对服务器...

终结解决Java Web开发过程中的中文乱码问题

网上很多关于Java Web开发过程中的中文乱码问题,我们前端后端都设置为UTF-8的编码,最后还是会发生乱码问题。1、不同浏览器造成的问题IE和Chrome会对URL的参数作不同的处理,比如,我们在...

java web开发过程中,中文乱码问题

在解决中文乱码之前,我们先来看看jsp文件中charset与pageEncoding的区别:          1.首先,charset是指服务器发送给客服端时的内容编码,charset=utf-8...

Java web开发中的中文乱码问题解决之道 - 概要篇

本文转载地址http://www.lifevv.com/java/doc/20080229211915719.html仅供收藏  每一个JAVA WEB开发者都会碰到乱码问题。本文阐述了JAVA...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:web开发java中文编码问题
举报原因:
原因补充:

(最多只允许输入30个字)