在jsp文件中的html顯示亂碼是因為服務端和客戶端的編碼不一致導致的。
如果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/html; charset=gb2312"%>,就可以消除亂碼了。
完整頁面如下:
<%@ page contentType="text/html; charset=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/html;charset=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/html;charset= gb2312"%>
<html>
<head>
<title>JSP的中文處理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文處理");%>
</body>
</html>
