Servlet中文亂碼問題解決辦法


首先對於源jsp網站和servlet里面的字符集要一樣,一般支持中文的字符集為UTF-8最好采用這個字符集(除此之外還有gb2312);

對於源jsp文件的代碼中需要設置

設置你的page里面的字符集

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

 設置html文件里面的字符集

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

如果對於參數通過get方法進行傳參的話,有兩種方法:

方法一:
在tomcat里面設置字符集為UTF-8

修改server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
* 必須有修改tomcat服務器配置文件權限

方法二:通過對servlet里面的進行設置:

			response.setHeader("Content-Type", "text/html;charset=UTF-8");//設置UTF-8的顯示頁面的類型和字符集
				username = new String(username.getBytes("ISO8859-1"),"utf-8");//根據你的tomcat里面的字符集進行對中文進行轉換,將iso轉換為UTF-8

如果對於參數通過post方法進行傳參的話,則設置為:

		response.setHeader("Content-Type", "text/html;charset=UTF-8");//設置UTF-8的顯示頁面的類型和字符集
		request.setCharacterEncoding("utf-8"); //設置通過post方法進行傳參的字符集

在這里需要注意的是:

1.對於post和get傳參的時候解決中文亂碼問題的時候一定要分清楚是哪種方式傳參,是post就得用post不然會沒用的

2.對於兩種不同的地方不能合用,亂碼問題解決不了的。

下面附上一個例子:
get.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 action="servlet/test" method="get">
  		<input type="text" name="getV">
  		<button type="submit">測試get請求</button>
  		</form>
</body>
</body>
</html>

post.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 action="servlet/test" method="post">
  		<input type="text" name="postV">
  		<button type="submit">測試post請求</button>
  		</form>
</body>
</html>

test.java

package testcharset;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class test extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			response.setHeader("Content-Type", "text/html;charset=UTF-8");//設置UTF-8的顯示頁面的類型和字符集
			PrintWriter out=response.getWriter();
			try {
				String username=request.getParameter("getV");
				username = new String(username.getBytes("ISO8859-1"),"utf-8");//根據你的tomcat里面的字符集進行對中文進行轉換,將iso轉換為UTF-8
				out.print("獲取的get請求:");
				out.print(username);
			} catch (Exception e) {
				e.printStackTrace();
				// TODO: handle exception
			}finally{
				try {
					out.close();
				} catch (Exception e2) {
					e2.printStackTrace();
					// TODO: handle exception
				}
			}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setHeader("Content-Type", "text/html;charset=UTF-8");//設置UTF-8的顯示頁面的類型和字符集
		request.setCharacterEncoding("utf-8"); //設置通過post方法進行傳參的字符集
		PrintWriter out=response.getWriter();
		try {
			out.print("獲取的Post請求:");
			out.print(request.getParameter("postV"));
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}finally{
			try {
				out.close();
			} catch (Exception e2) {
				e2.printStackTrace();
				// TODO: handle exception
			}
		}
	}

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM