1. 程式人生 > >javaWEB中前後臺中文亂碼問題解決方法

javaWEB中前後臺中文亂碼問題解決方法

中文問題一直是很多人難以解決的問題。特別是從前臺傳到後臺之後,都不知道問題出在哪裡了。現在給出幾種解決的方法。

方法一:

tomcat的自帶編碼是ISO-8859-1的格式,是不相容中文的編碼的。所以我們從後臺接收的時候要注意。

採用相同的格式去接收(ISO-8859-1),然後用能解析的編碼(utf-8)去轉換。這樣我們就能得到能相容中文的格式了。這樣處理之後發往前臺。注意:發往前臺的時候也需要設定一下

resp.setContentType("text/html;charset=utf-8");//設定頁面的字元編碼,解決介面顯示中文亂碼的問題微笑

protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//因為tomcat自帶編碼是ISO-8859-1格式

//解決亂碼方法之一
String name=req.getParameter("username");
String pwd=req.getParameter("pwd");
byte[] b=name.getBytes("ISO-8859-1");//用tomcat的格式(iso-8859-1)方式去讀。
String str=new String(b,"utf-8");//採用utf-8去接string
resp.setContentType("text/html;charset=utf-8");//設定頁面的字元編碼<span style="white-space:pre">	
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);
		PrintWriter pw =resp.getWriter();
		String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
		pw.print(str1);

方法二:

由於方法一比較繁瑣,採用用了簡單的設定。只需要簡單的一句就可以搞定
req.setCharacterEncoding("utf-8");//必須寫在第一位,因為採用這種方式去讀取資料,否則資料會出錯。
這樣就不用像之前的那樣繁瑣的設定了
protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//因為tomcat自帶編碼是ISO-8859-1格式
	
	//解決亂碼二《法一比較繁瑣》
		req.setCharacterEncoding("utf-8");//必須寫在第一位,因為採用這種方式去讀取資料,否

則資料會出錯。
//設定這樣方式去讀。這樣中文就能夠讀取出來了,但是需要注意。表單的傳送方式必須是<span style="color:#ff0000;"> method='post'</span>
		resp.setContentType("text/html;charset=utf-8");//設定傳過去的頁面顯示的編碼
		String name=req.getParameter("username");
		String pwd=req.getParameter("pwd");
		PrintWriter pw =resp.getWriter();
		String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
		pw.print(str1);

方法三:(法二就能解決大部分的亂碼問題了)

這是在法二的基礎上修改的。雖然我們能修改編碼格式去讀,但是考慮到使用者肯定不會修改,所以我們需要採用比較通用的辦法,讓使用者修改配置檔案。也就是web.xml檔案 需要修改web.xml裡面的內容,就是說,字元編碼從xml接收過來。需要在xml檔案中配置引數。 程式碼如下:
	<servlet>
    <servlet-name>Encodeing</servlet-name>
    <servlet-class>cn.hncu.com.encode.Encodeing</servlet-class>
    <init-param>
    	<param-name>charset</param-name>
    	<param-value>utf-8</param-value>//這裡面的內容可供使用者自己填寫(必須是編碼格式)
    </init-param>
  </servlet>
我們知道前臺和後臺進行交換必須經過web.xml配置
我們需要獲取web.xml的設定的引數
public void init(ServletConfig config) throws ServletException {
		charset=config.getInitParameter("charset");//獲得初始化引數。當然charset需要設定為全域性變數。後面的service函式需要設定req.setCharacterEncoding(charset);
	}
req.setCharacterEncoding(charset);
		resp.setContentType("text/html;charset=utf-8");
		String name=req.getParameter("username");
		String pwd=req.getParameter("pwd");
		
		PrintWriter pw =resp.getWriter();
		String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
		pw.print(str1);
		
解決的效果圖:
前臺程式碼:
 <body>
    <form action="login" method="post">//login在web.xml中配置,就能實現到後臺去讀取資料
    	使用者名稱:<input type="text" name="username"/><br/>
    	密碼:<input type="password" name="pwd"/><br/>
    	<input type="submit" value="登入"/>
    </form>
  </body>