关于ISO-8859-1编码和GB2312编码的问题,求高人指点

reddiablo 2010-09-13 02:59:53
初学web,我想自己动手练习一下,就做了一个简单的东西,功能就是在一个text框里输入学号,点查询按钮,然后根据输入的学号从数据库里检索出学生信息来,列在网页(对应的文件是studentdetails.jsp)上。

最开始,studentdetails.jsp里面没有这句话:<%@ page contentType="text/html; charset=GB2312" %>
运行出来的现象就是:写在studentdetails.jsp里面的汉字都是???,不过从DB里检出来的汉字是能正常显示的。
比如,我想要的结果是 姓名:张三
实际结果是: ?????张三。

为了解决这个问题,我在studentdetails.jsp里加上了这么一句:<%@ page contentType="text/html; %>
运行结果就正常了。

我现在弄不明白两个事
第一,这个乱码问题,不是应该charset=GB2312这句话解决么,为什么我没写charset=GB2312,运行结果就变正常了?
第二,因为默认的编码方式是ISO-8859-1,那是不是说ISO-8859-1可以显示汉字啊?

最后,我加上了整句<%@ page contentType="text/html; charset=GB2312" %>,编码方式变成了GB2312了,可是运行出来的结果变成这样的了: 姓名:????
就是说,studentdetails.jsp里面的汉字能正常显示了,但是DB里检出来的汉字不能正常显示了。这个原因我想是因为mysql的数据库驱动程序的默认编码是ISO-8859-1,所以出现乱码了。
可是,没加charset=GB2312的时候显示的是正常的,不是说明ISO-8859-1能够正常显示汉字么?

求高人解惑!谢谢!
...全文
372 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
HS_ORHZ 2010-09-14
  • 打赏
  • 举报
回复
是不是由于servlet中的编码格式和jsp中的编码格式不统一!要把视图、控制器、数据库部分的编码格式统一。一般都用UTF-8编码!
reddiablo 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 magong 的回复:]
再回答第1个问题。JSP文件中的字符编码,若没有<%@ page contentType指引,则IDE可能会认错源文件字符编码(这个层次上默认是中文操作系统的默认值-GB),造成JSP转换得到的Servlet中出现超128数值的英文字符转换为GB时得到的问号。
[/Quote]

我又产生两个问题
第一个,现在我的jsp生成的servlet里有这样的代码:
out.write("\r\n");
out.write(" <p>濮撳悕锛�");
out.print(request.getAttribute("name"));
out.write("</p>\r\n");
out.write(" <p>骞撮緞锛�");
out.print(request.getAttribute("age"));
有没有什么办法,能让jsp生成的servlet里这个代码变成不乱码的(现在servlet虽然是乱码,但是网页上显示是正常的),我想应该是这样的:
out.write("\r\n");
out.write(" <p>姓名");
out.print(request.getAttribute("name"));
out.write("</p>\r\n");
out.write(" <p>年龄");
out.print(request.getAttribute("age"));

第二个,jsp文件中<%@ page contentType="text/html; charset=GB2312" %>这句话,写charset=GB2312和不写charset=GB2312有什么区别?是对jsp转变成servlet的阶段有影响吗?

渴求高手继续解惑!
WANGYQ_412 2010-09-14
  • 打赏
  • 举报
回复
这种乱码问题最简单的解决方式就是将数据库、页面、web服务器的编码格式统一设置为UTF-8格式!许多乱码问题不用自己写代码就能解决!
bluemouse_2008 2010-09-14
  • 打赏
  • 举报
回复
呵呵 我也是mysql中碰到过几次乱码问题,还好解决了。
tongxingzhen123 2010-09-14
  • 打赏
  • 举报
回复
ISO-8859-1不能显示汉字,这是一定的
magong 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 reddiablo 的回复:]
我又产生两个问题
第一个,现在我的jsp生成的servlet里有这样的代码:
……
[/Quote]
第1个问题:Tomcat jasper 用的java文件物理字符编码是UTF-8,所以当你将你的JSP文件物理字符编码设为UTF-8,将可以在生成的servlet文件中看到“姓名”“年龄”等字样。记得用支持UTF-8的编辑器看,在Eclipse中看需要设置.java文件节点的文件物理字符编码为UTF-8。
第2个问题:不写charset=GB2312表示charset=ISO-8859-1。这个决定响应体字符编码,即out输出字符流上的字符编码。
另外IDE智能性加强后,这个对IDE初次识别JSP文件物理字符集也有影响,不过你还是能否定IDE的提示。

magong 2010-09-13
  • 打赏
  • 举报
回复
恭喜你捅了马蜂窝了,还是两个马蜂窝一起捅。
在Unicode没有取得压倒性的优势之前,这些问题将会长期困扰初学者。

[Quote=引用楼主 reddiablo 的回复:]
我现在弄不明白两个事
第一,这个乱码问题,不是应该charset=GB2312这句话解决么,为什么我没写charset=GB2312,运行结果就变正常了?
第二,因为默认的编码方式是ISO-8859-1,那是不是说ISO-8859-1可以显示汉字啊?

[/Quote]
先回答第2个问题。是的,可以,但仅限于显示。两个超128数值的ISO-8859-1字符靠在一起,物理上就是一个GB2312汉字。能看到汉字,得感谢中文操作系统,默认将没有标字符集的页面认作GB2312字符集。这是一个历史造成的特意的巧合。
再回答第1个问题。JSP文件中的字符编码,若没有<%@ page contentType指引,则IDE可能会认错源文件字符编码(这个层次上默认是中文操作系统的默认值-GB),造成JSP转换得到的Servlet中出现超128数值的英文字符转换为GB时得到的问号。
smallroad123 2010-09-13
  • 打赏
  • 举报
回复
建议LZ可以看一下mysql之类的乱码文章
Qautumn 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 reddiablo 的回复:]
奇了个怪的,书上说默认的是ISO-8859-1编码。
[/Quote]
在Myeclipse编写时如果还有ISO-8859-1,一旦页面有汉字是无法保存的,一般都改为UTF-8
wypbt1032 2010-09-13
  • 打赏
  • 举报
回复
ISO-8859-1是肯定不能显示汉字的
GB2312或者GBK才能显示中文
中文显示成乱码,是因为编码和解码用的字符集不同,
中文用GBK编码后,在用iso8859-1解码就会显示乱码,如果这时在用iso8859-1进行编码,用GBK解码,就又会恢复正常
reddiablo 2010-09-13
  • 打赏
  • 举报
回复
奇了个怪的,书上说默认的是ISO-8859-1编码。
DryKillLogic 2010-09-13
  • 打赏
  • 举报
回复
ISO-8859-1是肯定不能显示汉字的,ISO-8859-1又叫Latin-1 包括了书写所有西方欧洲语言的文字。
LZ的问题有些奇怪,是不是打开JSP页的默认编码就是GB2312呢?

一般在JSP页中加入<%@ page language="java" pageEncoding="GB2312"%>就可以控制页中的编码了。
乱码问题要确定是在哪一步出现的:
1.从数据库中取出来的时候
2.在传输过程中
3.在页面显示的时候
不同的情况要不同的解决方式
licip 2010-09-13
  • 打赏
  • 举报
回复
ISO-8859-1这是西欧的编码方式。不能显示汉字。要显示要转码

GB2312这是中文显示的编码。
小象可乐 2010-09-13
  • 打赏
  • 举报
回复
ISO-8859-1不能显示汉字,这是一定的!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧