如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
解决办法:
1、未指定使用字符集编码
下面的显示页面(display.jsp)就出现乱码:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:
<%@ page contentType="text/htmlcharset=gb2312"%>,就可以消除乱码了。
完整页面如下:
<%@ page contentType="text/htmlcharset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
2、 编码字符集设置不一致
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/htmlcharset=iso8859-1"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
第一处<%@ page language="java" pageEncoding="gb2312"%>的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为gb2312的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式用不用设置都可以。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式出现了乱码。
完整解决代码如下:
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/htmlcharset= gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
要在jsp页面中放置 html 文本是不行的,因为放在jsp中的 html 文本会相互混淆起来,产生严重的错误。如果 html
文本很少,可以将其中的〈 〉用全角的〈 〉代替;如果文本很长,将它门放在标签〈xmp〉〈/xmp〉中,这是专门用来显示 html
文本的标签。与此相关的一个问题是:有时从网页上“挖”下来的 html 代码,放在 html 文件中浏览时,显示的全是 html
代码,就是因为他们制做网页时将标签的大于号、小于号用全角的〈〉代替了