JavaWeb——響應編碼與請求編碼
阿新 • • 發佈:2019-01-02
一、引言
以前非常怵頭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編碼;