特殊时期,大家一定要保重身体。增强自身免疫力,一切都会过去,一起加油!!!

只有更全没有最全的JSP中及Servlet中出现各种乱码的解决方法

JSP zchao 762℃ 0评论

Jsp中及Servlet中出现的各种乱码问题方法汇集—-整整花了一天时间才将能出现的能想到的所有乱码问题解决



以下内容都经过验证,请放心大胆尝试,不好用的方法是不会放在网站中的,这是一种责任,总有一个问题和你的一样,当然,也有可能一模不一样,那请将你的问题解决,然后留言告诉我,感谢,我们只有发现问题,才会解决问题。

—-所以发现问题的人,比解决问题的人更伟大。

 

为何会出现乱码?

Java的内核和class文件是基于unicode的。
而Java和JSP源文件的保存方式是基于字节流的。
Java(包括JSP)源文件中很可能包含有中文,主要是参数中带有中文就容易出现问题。
Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

出现乱码的类型?

页面乱码、参数乱码、表单乱码、源文件乱码。

 

两种情况:在Jsp页面中出现的乱码和在Servlet中出现的乱码

先介绍Jsp页面中出现的乱码?

Jsp页面乱码两种情况:

1是未指定使用字符集编码

2是编码字符集设置不一致

一:未指定使用字符集编码?

1.出现乱码前的代码?

看代码为display.jsp页面

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>JSP的中文处理</title>
</head>
<body>

<h2>Jsp页面乱码解决</h2>

<%out.print(“zchao博客之家解决–JSP的中文处理”);%>

</body>
</html>

出现乱码的页面:

为什么会出现这种乱码?

因为JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符

解决办法:

在jsp页面设置浏览器解码方式与jsp页面指编码方式相同即可
我这里设置jsp页面编码是utf-8;
<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>

浏览器编码也是utf-8;
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>

当然编码方式还可以设置gbk或gb2312;
但是强调一下,由于各个页面之间的编码都不一定相同,所以会出现使用utf-8或gbk或gb2312
可能不一定是都能解决乱码问题,而且你所用的浏览器的默认编码也不同(meta中设置charset),可能需要相应改变,
或者你用的编程工具如eclipse,myEclipse等本身对页面的编码不同(这个下面有详细讲解)
所以需要你尝试,在这三个之间中选择适合你的编码并确定与你用的浏览器编码相同,
如果多次转码可能就会越转越乱,导致最后转不回来,所以且转且珍惜。

完美解决的代码?

<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>JSP的中文处理</title>
</head>
<body>

<h2>Jsp页面乱码解决</h2>

<%out.print(“zchao博客之家解决–JSP的中文处理”);%>

</body>
</html>

 乱码解决的页面:

二.编码字符集设置不一致(与上面的基本是一个问题)

出现乱码前的代码?

<%@ page language=”java” contentType=”text/html; charset=ISO-8859-1″
pageEncoding=”utf-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>JSP的中文处理</title>
</head>
<body>

<h2>Jsp页面乱码解决</h2>

<%out.print(“zchao博客之家解决–JSP的中文处理”);%>

</body>
</html>

 

为什么会出现乱码,大家都一目了然
由于页面编码不一致导致的乱码,三处设置了字符集编码
第一处:contentType=”text/html; charset=ISO-8859-1″ 编码为解码格式
第二处:pageEncoding=”utf-8″的编码格式为jsp文件的存储格式
第三处:content=”text/html; charset=utf-8″编码为控制浏览器的解码方式

 

完整解决代码和上面的代码一模一样。

 

URL传递参数中文乱码?

一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。

下面是一个示例程序(这个程序即使你改变了编码也有可能出现乱码)

<%@ page language=”java” import=”java.util.*” contentType=”text/html;charset=gb2312″
pageEncoding=”gb2312″%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<title>URL传递参数中文处理示例</title>
</head>
<%
String param = request.getParameter(“param”);
%>
<body>
<a href=”URLCharset.jsp?param=zchao博客之家”>请点击这个链接</a><br>
你提交的参数为:<%=param%>
</body>
</html>

 

为什么会出现乱码?

上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,
如果将编码格式都一致了还解决不了就需要修改Tomcat服务器的配置文件才能解决问题。

解决方法1:URIEncoding=”gb2312″ 或URIEncoding=”gbk” 或URIEncoding=”utf-8″
修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下
<Connector port=”8080″ protocol=”HTTP/1.1″ URIEncoding=”gb2312″
connectionTimeout=”20000″
redirectPort=”8443″ />

 

解决方法2:

首先配置tomcat下server.xml的Connector节点增加useBodyEncodingForURI=”true”属性配置,
然后在JSP页面中加入<%request.setCharacterEncoding(“utf-8”);%>
所设置的编码格式进行编码。

Tomcat中server.xml配置如下:
<Connector port=”8080″ protocol=”HTTP/1.1″

connectionTimeout=”20000″

redirectPort=”8443″

useBodyEncodingForURI=”true”

/>

 

 

另外的情况(两个页面)

方法一:将接受的参数直接转换

test1.jsp页面
<%@ page language=”java” import=”java.util.*” contentType=”text/html;charset=utf-8″
pageEncoding=”utf-8″%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>URL传递参数中文处理示例</title>
</head>

<body>
<a href=”receive.jsp?param=zchao博客之家”>请点击这个链接</a><br>

</body>
</html>

 

test2.jsp负责接收

<%@ page language=”java” import=”java.util.*” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<%
String param = request.getParameter(“param”);
String result = new String(param.getBytes(“iso-8859-1”), “utf-8”);
out.println(result);
%>
<br><br>
<%=result %>

</body>
</html>

 

方法二:
利用编码与解码解决

test3.jsp

<%@ page language=”java” import=”java.util.*” contentType=”text/html;charset=utf-8″
pageEncoding=”utf-8″%>

<%@ page import=”java.net.*” %>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>URL传递参数中文处理示例</title>
</head>

<body>
<a href=’test4.jsp?act=<%=URLEncoder.encode(“zchao博客值之家”)%>’>test</a>

</body>
</html>

 

test4.jsp页面接受参数
<%@ page language=”java” import=”java.util.*” contentType=”text/html;charset=utf-8″
pageEncoding=”utf-8″%>

<%@ page import=”java.net.*” %>

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<%

String tempVal = URLDecoder.decode(request.getParameter(“act”));

out.println(new String(tempVal.getBytes(“ISO-8859-1”), “utf-8”));

%>

</body>
</html>

 

 

表单提交中文时出现乱码?

get方式提交

submit.jsp页面
<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<form name=”form1″ method=”get” action=”process.jsp”>

<div align=”center”>

<input type=”text” name=”name”>

<input type=”submit” name=”Submit” value=”Submit”>

</div>

</form>

</body>
</html>

process.jsp页面
<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<%=request.getParameter(“name”)%>

</body>
</html>

 

post方式提交

两种解决办法:

A、 接受参数时进行编码转换

String s=new String(request.getParameter(“name”).getBytes(“ISO-8859-1″),”utf-8”) ;

B、通过request.seCharacterEncoding (“utf-8”)对请求进行统一编码,就实现了中文的正常显示。

 

A方法process.jsp页面代码:
<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<%– <%=request.getParameter(“name”)%> 这样会是乱码,post方式本能直接接收–%>
<%
String s=new String(request.getParameter(“name”).getBytes(“ISO-8859-1″),”utf-8”) ;

out.print(s);

%>
</body>
</html>

 

B方法process.jsp页面代码:
<%@ page language=”java” contentType=”text/html; charset=utf-8″
pageEncoding=”utf-8″%>

<%request.setCharacterEncoding(“utf-8”);%>

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Insert title here</title>
</head>
<body>

<%=request.getParameter(“name”)%>

</body>
</html>

 

如果eclipse或者myEclipse中的jsp文件出现乱码则可以对eclipse设置?

 

菜单栏–》Window–》Preferences–》Content Type(上面搜索即可)–》Text–》JSP
然后将*.jsp的默认编码(Default encoding)改为:UTF-8或GB2312即可

 

 

从HTML页面向Servlet页面中传递参数?

 

从url中传递参数用doGet处理

<a href=”ServletA?name=zchao博客之家”>点击</a>

index.html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Insert title here</title>
</head>
<body>

<a href=”ServletA?name=zchao博客之家”>点击</a>

</body>
</html>

 

ServletA.java部分主要代码

@WebServlet(“/ServletA”)
public class ServletA extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType(“text/html;charset=utf-8”);
String name = request.getParameter(“name”);
System.out.println(name); //eclipse控制台输出
response.getWriter().write(name); //页面输出
}
}

 

用表单传递参数,分别用doGet和doPost处理

用doPost或doGet处理的代码如下(下面的代码都可以解决)
index.html代码
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Insert title here</title>
</head>
<body>

 

<form action=”ServletA” method=”post/get”>
用户名:<input type=”text” name=”userName” size=”10″/>
密 码:<input type=”password” name=”password” size=”10″/>
<input type=”submit” value=”提交”>
</form>
</body>
</html>

ServletA.java部分主要代码
@WebServlet(“/ServletA”)
public class ServletA extends HttpServlet {

protected void doPost/doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);

response.setContentType(“text/html;charset=utf-8”);
response.setHeader(“content-type”, “text/html;charset=utf-8”);

String userName = request.getParameter(“userName”);
String password = request.getParameter(“password”);
System.out.println(“表单输入userName的值:” + userName + “<br>”);
System.out.println(“表单输入password的值:” + password + “<br>”);

response.getWriter().write(userName);

response.getWriter().write(password);

}
}

页面如下:

表单代码:

页面显示代码:

控制台代码:



至此,目前在Jsp页面和Servlet中遇到的乱码问题完美解决,希望本文对你的学习路上有所帮助,帮助他人的同时就是帮助自己,真理。

从中也加深了我对乱码问题的理解。

遇到问题,记得贵在坚持,一旦你认真了,没有什么解决不了。

 

zchao博客之家—-既然不能伴你上半生,那么你的下半生,如果我们有幸,请让我们与你同行,风雨不惧—-forerer!

 

转载请注明:zchao博客之家 » 只有更全没有最全的JSP中及Servlet中出现各种乱码的解决方法

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!