国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

jsp中文亂碼

2019-11-08 03:17:33
字體:
供稿:網(wǎng)友

 

之前總是碰到jsp頁面亂碼的問題,每次都是現(xiàn)在網(wǎng)上搜,然后胡亂改,改完也不明白原因。

這次正好作下總結(jié),中文亂碼就是因?yàn)榫幋a不符,可能出現(xiàn)亂碼有四個地方:

1 JSP編碼亂碼

2 HTML編碼亂碼

3 request獲取數(shù)據(jù)亂碼

4 response輸出信息亂碼

5 Cookie導(dǎo)致的編碼問題

下面將會對上面幾種情況進(jìn)行介紹:

  JSP亂碼

  這種是最常見的,設(shè)置編碼的位置位于JSP的第一行,如果在Eclipse中新建一個JSP默認(rèn)是下面這種:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

  可以看到它默認(rèn)的頁面編碼和傳輸編碼都是ISO-8859-1,這是用于歐洲國家的編碼。

  可以通過設(shè)置Eclipse中JSP的編碼格式,來修改默認(rèn)生成的編碼格式。

  如果想要支持中文,可以使用UTF-8、GB2312、GBK等,其中UTF-8是國際化的,哪個國家的都支持,所以推薦使用這個。

  再來說說上面涉及到編碼的兩個地方:charset 和 pageEncoding

  charset是指服務(wù)器發(fā)往客戶端展現(xiàn)時(shí)的編碼;

  pageEncoding用于設(shè)置JSP頁面本身的編碼。

 

  JSP在部署后提供給用戶使用,會經(jīng)過三個階段

  1 JSP生成java文件:這個階段會使用pageEncoding所定義的編碼格式進(jìn)行轉(zhuǎn)換

  2 java文件生成class文件:這個階段由服務(wù)器tomcat自動使用utf-8編碼把java文件轉(zhuǎn)換成字節(jié)碼class文件  

  3 通過讀取class文件展現(xiàn)給用戶:這個階段由tomcat服務(wù)器獲取字節(jié)碼內(nèi)容,通過使用contentType所定義的編碼格式展現(xiàn)給用戶。

  大致過程如下圖:

  這樣設(shè)置好JSP中的第一行代碼,就可以保證基本的JSP展現(xiàn)沒有亂碼了!

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

  HTML亂碼

  因?yàn)镴SP中也包含html的內(nèi)容,HTML本身也是有編碼格式的。

復(fù)制代碼
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body></body></html>復(fù)制代碼

  如果這部分編碼出現(xiàn)問題,那么html中標(biāo)簽的中文命名就會出現(xiàn)亂碼。

  html中因?yàn)橹簧婕暗奖憩F(xiàn)層,所以只有一個屬性content中charset,這個編碼格式設(shè)置對了,就沒問題了。

  request中文亂碼

  有時(shí)候在做jsp邏輯處理時(shí),比如提交表單,從前臺注冊的頁面提交了一部分的數(shù)據(jù),但是后面處理的JSP頁面通過 request.getParameter 調(diào)用時(shí),獲取到的是一堆亂碼。

  這是因?yàn)殡m然前面JSP設(shè)置了編碼格式,卻沒有在當(dāng)前的JSP中設(shè)置讀取數(shù)據(jù)的編碼格式。

  使用下面的代碼,就可以是設(shè)置request獲取請求內(nèi)容的數(shù)據(jù)編碼:

request.setCharacterEncoding("utf-8");

  

  需要注意的是,這種方式對 URL傳參這種JSP請求 是沒有作用的。比如:

<a href="js  這種情況仍然會出現(xiàn)亂碼,這種URL傳參的方式,只能修改服務(wù)器tomcat的傳輸編碼格式。

  修改tomcat安裝文件 apache-tomcat-6.0.43/conf 目錄下的server.xml

  添加 URIEncoding=”UTF-8” ,就可以處理URL傳遞參數(shù)造成的中文亂碼問題了。

  response輸出中文亂碼

  可能現(xiàn)在已經(jīng)沒有多少使用這種方式輸出頁面的了,但是還是有必要說一下,response輸出頁面元素內(nèi)容時(shí),也會出現(xiàn)亂碼。

  使用下面代碼就可以設(shè)置response輸出的編碼格式:

response.setContentType("text/html;charset=utf-8");

  cookie造成的中文亂碼

  Cookie由于需要保存在客戶端中,因此使用過程中都需要編碼以及轉(zhuǎn)碼:

  在保存Cookie數(shù)據(jù)前

  首先引入java.net.*,該包中包含URLEncoder類;

  保證response與request的編碼正確;

  使用URLEncoder進(jìn)行轉(zhuǎn)碼,并保存。

復(fù)制代碼
<%@ page language="java" contentType="text/html; charset=utf-8"    import="java.net.*"    pageEncoding="utf-8"%><%//保證request以及response的編碼 request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//使用URLEncoder解決cookie中中文問題String username = URLEncoder.encode(request.getParameter("username"),"utf-8");String passWord = URLEncoder.encode(request.getParameter("password"),"utf-8");Cookie usernameCookie = new Cookie("username",username);Cookie passwordCookie = new Cookie("password",password);usernameCookie.setMaxAge(864000);passwordCookie.setMaxAge(864000);response.addCookie(usernameCookie);response.addCookie(passwordCookie);%>復(fù)制代碼

  在使用Cookie數(shù)據(jù)前

  依然要注意導(dǎo)入必備的包:java.net.*

  注意request的編碼;

  使用URLDecoder進(jìn)行解碼

復(fù)制代碼
<%@ page language="java" import="java.util.*,java.io.*,java.net.*" contentType="text/html; charset=utf-8"%><%        request.setCharacterEncoding("utf-8");        String username = "";        String password = "";        Cookie[] cookies = request.getCookies();        if(cookies!=null && cookies.length>0){            for(Cookie c:cookies){                if(c.getName().equals("username")){                    username = URLDecoder.decode(c.getValue(),"utf-8");                    System.out.println(username);                }                if(c.getName().equals("password")){                    password = URLDecoder.decode(c.getValue(),"utf-8");                }            }        }%>復(fù)制代碼
上一篇:自定義jsp標(biāo)簽

下一篇:jsp小知識

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥化市| 海林市| 盱眙县| 肇东市| 卫辉市| 宝应县| 长沙市| 静安区| 南陵县| 耿马| 安义县| 江达县| 莱西市| 河源市| 环江| 榕江县| 扶风县| 孟州市| 苍山县| 偏关县| 盐源县| 瑞昌市| 巴中市| 房产| 抚宁县| 米易县| 张家口市| 禹州市| 正蓝旗| 砀山县| 中超| 梁河县| 华宁县| 县级市| 盘锦市| 兴海县| 鄂尔多斯市| 观塘区| 吉安县| 肥西县| 枣强县|