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 |