磨刀不误砍柴工

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

   ::  ::  ::  :: 管理

JAVA乱码:

测试代码:

								public
								class SayHello {
	publicstaticvoid main(String[] args){
		//System.setProperty("file.encoding", "iso8859-1");
		System.out.println("您好!");
	}
}

采用JVM默认file.encoding编码编译:(默认为GBK)
 image

指定file.encoding编译:(指定为iso8859-1)

image

可以看出,若不指定初始参数file.encoding=iso8859-1(采用默认的GBK),则打印出乱码。同时,若指定的值与编译时不一致也会是乱码。

 

因此,解决乱码的关键在于,写与读时,编码方式要一致。

 

--------------------------------------------------------------------------------------------------------------

JSP乱码:

测试jsp页面:

用EditPlus书写jsp页面encoding.jsp

java" contentType="text/html; charset=GB2312"
    pageEncoding="UTF-8"%>]]>




测试页面


欢迎您!

然后保存到tomcat的Root目录下文件中,注意:选择编码方式为UTF-8

image

游览此页面,可以看到页面正常无乱码:

image


将:

java" contentType="text/html; charset=GB2312" pageEncoding="UTF-8"%>]]>

替换为:

java" contentType="text/html; charset=GB2312" pageEncoding="GBK"%>]]>

再次游览此页面,页面出现乱码:

image

 

原理:

]]>

在这行的页面指令中的"text/html; charset=UTF-8"将应答消息中的"Content-type" 设置为"text/html; charset=UTF-8"。

"pageEncoding"只是指明了 JSP 页面本身的编码格式,指明了 JSP 是以什么编码方式保存。容器在读取文件时将起转化为内部使用的 Unicode. 当应答发送回至浏览器时,容器会将内部使用的 Unicode 转化为在 Content-type 中指定的字符集。

如果没有指定 PageEncoding,可以通过使用 Content-type 指定的字符集来解释 JSP 页面字节。

 

jsp页面在服务器端处理的过程是:

jsp—>.java文件—> .class文件

jsp—> .java文件是由服务器读取jsp页面文件,根据pageEncoding指明的编码方式自动转换的。与前面java乱码一节中指出的,这里也要保证写与读时编码一致才不会出现乱码。从上面的例子也验证了这一点。

.java文件 --> .calss文件过程,即为java编译过程,由服务器边jvm自动进行。

 

至于,text/html; charset=GB2312,则可以设置成任何游览器支持的并且支持中文的编码方式,都能保证页面不出现乱码。(表单提交及URL请求不在此讨论范围内),这是因为,在生成响应给游览器前,虚拟机中以unicode编码的中文是正确的,服务器会更据指定的charset,将unicode转换成正确的编码。

 

参考文章:

Java 编程技术中汉字问题的分析及解决

JSP/Servlet 中的汉字编码问题

编码字符集与Java -Java World乱码问题根源之所在

UTF-8 字符处理在 Web 开发中的应用

 

Technorati 标签:
posted on 2008-10-16 13:41 liwei5891 阅读(586) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: