1. 程式人生 > >JavaWeb——響應編碼與請求編碼

JavaWeb——響應編碼與請求編碼

一、引言

以前非常怵頭web中編碼問題,如今沒辦法必須搞了,硬著頭皮把裡面的東西搞清楚了,供大家分享下==務必先了解原理,再扎進程式碼==

二、編碼基礎

這裡主要理解字符集與字元編碼問題。

字符集就像一個字型檔,類似英文,中文,日文等,只是一個庫;

字元編碼就像一個對映關係,將字符集對映為一個個數用計算機儲存;如utf,注意utf-8,utf-6等都是一個字符集,不同的字元編碼==

三、響應編碼

一般tomcat伺服器預設解碼ios-8859-1,從tomcat8以後預設utf-8不用再修改,瀏覽器預設解碼是gbk,這裡所以我們一般都自己設定,這樣比較好控制。

這裡response.setHeader("content-type", "text/html;charset=utf-8");有兩個作用:1返回資料按照utf-8編碼;2設定contenttype告知瀏覽器編碼格式,然後瀏覽器就會用相應的格式解碼,從而不會出現亂碼==

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setHeader("content-type", "text/html;charset=utf-8");
		//request.setCharacterEncoding("utf-8");
		response.getWriter().println("哈哈哈");
	}


四、請求編碼

這裡分為get請求和post請求:

1、get請求

直接使用getParameter()就可以,不用轉換,要是tomcat7及之前的可能要設定註釋程式碼,因為之間的tomcat預設gbk,要轉換一下。

然後設定返回編碼格式即可setHeader,這裡只能用gbk和utf-8,我開始設定了iso-8859-1除了亂碼,後來發現自己腦子water了,iso-8859-1根本不支援中文==

		String name=request.getParameter("name");
/*		byte[]bytes=name.getBytes("iso-8859-1");
		name=new String(bytes,"utf-8");
		response.setHeader("content-type", "text/html;charset=utf-8");*/
		
		response.setHeader("content-type", "text/html;charset=utf-8");
		response.getWriter().print(name);

2、post請求

post請求要設定相應的解碼方式,這個一般由發出post請求的介面決定,比如有表單的jsp介面它預設編碼utf-8,傳送的請求也是utf-8的。

		request.setCharacterEncoding("utf-8");
		String name=request.getParameter("name");
		response.setHeader("content-type", "text/html;charset=utf-8");
		//response.setHeader("content-type", "text/html;charset=utf-8");
		response.getWriter().print(name);


五、URL編碼

URL編碼,就是將中文轉換為16進製表示,為了防止網路傳輸中資料丟失。

get一般不會對中文編碼,post會對中文進行編碼,然後在瀏覽器自動編碼,在伺服器自動解碼。


四、總結

  • 設定響應編碼;
  • 設定請求編碼,get與post;
  • URL編碼;