Topic: JSP中的乱码问题解决方案

  Print this page

1.JSP中的乱码问题解决方案 Copy to clipboard
Posted by: neverlose
Posted on: 2003-09-19 08:49

(以下浏览器均为IE,服务器为tomcat)

服务器发送页面给浏览器时有两个地方指定encoding
一处是在http应答的header里
一处是在html文档里

1.http头设置编码
若在jsp中request.setContentType("text/html; encoding=gb2312");
这就明确告诉浏览器这篇文档是gb2312编码的,浏览器不作任何转换,只是以

gb2312来显示.若文档中有8859_1编码的字串,将会出现乱码.

若jsp中干脆就没有setContentType,服务器会把http头的中的编码设为8859_1,
浏览器通过http头就认为这篇文档是8859_1编码的(而不管文档真正的编码是什么

),会以8859_1来显示.
若文档中有8859_1编码的中文字串,只要手动调整浏览器的encoding到gb2312,浏

览器会做一个8859_1到gb2312的转换,并以gb2312来显示,你会看到正确的文字.

但这样每次都要手动来改变浏览器的encoding很麻烦.

2.在html文档中设置编码
要让html文档中设置的编码有效,必须把http头中的编码设为空.
上文说过,如果jsp中没有setContentType,服务器会把http头的中的编码设为

8859_1, 这样一来,浏览器还是只认http头中设置的编码而不认html文档中设的编
但这样每次都要手动来改变浏览器的encoding很麻烦.

2.在html文档中设置编码
要让html文档中设置的编码有效,必须把http头中的编码设为空.
上文说过,如果jsp中没有setContentType,服务器会把http头的中的编码设为

8859_1, 这样一来,浏览器还是只认http头中设置的编码而不认html文档中设的编

码.
于是,我们在jsp中来一句
request.setContentType("text/html; encoding=");
哈哈,这样浏览器就把文档默认为是8859_1编码的.
如果html文档中有
<meta http-equiv="Content-Type" content="t会出现乱码.

若jsp中干脆就没有setContentType,服务器会把http头的中的编码设为8859_1,
浏览器通过http头就认为这篇文档是8859_1编码的(而不管文档真正的编码是什么

),会以8859_1来显示.
若文档中有8859_1编码的中文字串,只要手动调整浏览器的encoding到gb2312,浏

览器会做一个8859_1到gb2312的转换,并以gb2312来显示,你会看到正确的文字.

但这样每次都要手动来改变浏览器的encoding很麻烦.

2.在html文档中设置编码
要让html文档中设置的编码有效,必须把http头中的编码设为空.
上文说过,如果jsp中没有setContentType,服务器会把http头的中的编码设为

8859_1, 这样一来,浏览器还是只认http头中设置的编码而不认html文档中设的编
但这样每次都要手动来改变浏览器的encoding很麻烦.

2.在html文档中设置编码
要让html文档中设置的编码有效,必须把http头中的编码设为空.
上文说过,如果jsp中没有setContentType,服务器会把http头的中的编码设为

8859_1, 这样一来,浏览器还是只认http头中设置的编码而不认html文档中设的编

码.
于是,我们在jsp中来一句
request.setContentType("text/html; encoding=");
哈哈,这样浏览器就把文档默认为是8859_1编码的.
如果html文档中有
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
那么浏览器就会做一个8859_1到gb2312的转换,并以gb2312来显示.
由于我们在jsp中输出的中文字串都是8859_1编码的,所有的转换都由浏览器来完成的,所以
我们看到的是正确的文字.

体会:整篇文档的encoding必须一致.
在上文第1种情况中,文档中编码不一致,出现乱码,怎么调都不行.
第2种情况中,文档中的编码都是一致的,但浏览器的显示方式不对,需手动调整.
第3种情况中,文档中的编码都是一致的(8859_1),浏览器的显示方式也对了,因此就正确了.

2.Re:JSP中的乱码问题 [Re: neverlose] Copy to clipboard
Posted by: ditty
Posted on: 2003-09-19 09:01

看了之后糊里糊涂的,不知道你到底是啥用意?
是求助还是共享自己的经验???
建议以后最好在标题中强调一下,而且,中文或英文的语言逻辑最好强一些。

3.Re:JSP中的乱码问题解决方案 [Re: neverlose] Copy to clipboard
Posted by: neverlose
Posted on: 2003-09-19 09:08

不好意思 刚才没注意标题
多谢啦

4.Re:JSP中的乱码问题解决方案 [Re: neverlose] Copy to clipboard
Posted by: lzy49810
Posted on: 2003-09-22 20:20

写的太好了!我这也有一个看起来比较简单!大家共享!
1.在jsp文件中加上<%@ page contentType="text/html;charset=gb2312"%>可以避免浏览器整体的乱码.
2.用form表单提交的中文参数.
String tmp=new String(request.getParameter("text1").getBytes("ISO-8859-1"));
3.jsp中超链接显示的中文问题
<a href="<%out.print("/root/"+(new String(s2,"gb2312"))%>"></a>

5.Re:JSP中的乱码问题解决方案 [Re: neverlose] Copy to clipboard
Posted by: redMaya
Posted on: 2003-09-22 23:14

jsp中的乱码问题,不止这几种,关键是要了解,是在什么环节出现了乱码。
然后根据具体的情况,进行相应的转换。
这也不是什么大的问题。

6.Re:JSP中的乱码问题解决方案 [Re: neverlose] Copy to clipboard
Posted by: archonLing
Posted on: 2003-09-23 10:13

Why not set the charset to UTF8? Then you would not have the charset issue. Google is using it to show multi-languages on one page. Just my 2 cents.

7.Re:JSP中的乱码问题解决方案 [Re: neverlose] Copy to clipboard
Posted by: ThatWinter
Posted on: 2003-09-28 19:39

数据库字段设置不好
也能出现乱码


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923