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

首頁 > 編程 > JSP > 正文

如何在JSP中處理中文

2024-09-05 00:19:30
字體:
供稿:網(wǎng)友
注冊會員,創(chuàng)建你的web開發(fā)資料庫,如何在jsp中處理中文

在一個web應用中經(jīng)常需要向服務器傳遞一些參數(shù),一般通過form向服務器發(fā)送一個post請求。在參數(shù)中有可能包含中文信息,如用戶信息登記、購物定單中的地址信息等等。參數(shù)字符串一般用本地字符集進行編碼,如中文采用gb2312或gbk字符集,英文或西歐文字采用iso8859_1字符集,但在java程序中一律采用unicode處理字符串,這就需要有一個編碼轉(zhuǎn)換的過程。不幸的是,現(xiàn)有的大部分java應用服務器都是在英語國家開發(fā)出來的,由于缺乏大字符集(中文、日文、韓文等)的應用環(huán)境,這些應用服務器在處理http請求參數(shù)時都存在一些中文處理的問題,也是最為困擾jsp和servlet開發(fā)者的問題。

產(chǎn)生這一問題的根本原因是在http請求中缺乏足夠的信息來指明客戶端所使用的字符集。在一個jsp頁面中我們可以通過下面的偽指令來指明輸出頁面所使用的字符集:



jsp引擎會將上面的偽指令轉(zhuǎn)換為http應答的頭部:

content-type: text/html; charset=gb2312

樣輸出的就是采用gb2312編碼的中文頁面,瀏覽器會正確地顯示出中文。但瀏覽器在將form的內(nèi)容post到服務器時卻沒有包含charset,而且將中文內(nèi)容用%xx的形式(xx是十六進制數(shù))進行編碼,例如漢字"中"的gb2312內(nèi)碼為0xd6d0,在http請求中就變成了%d6%d0,根據(jù)rfc2616的規(guī)定,如果在http請求中未指明字符集,就使用iso8859_1編碼,這樣"中"字在處理時變成了兩個字符,分別為´u00d6´和´u00d0´,而返回到客戶端時變成了兩個不可顯示的字符,瀏覽器一般顯示成´??´。

解決這一問題的傳統(tǒng)做法是編寫額外的代碼來完成字符集的轉(zhuǎn)換:

strout = new string(strin.getbytes("8859_1"), "gb2312");

strin是未經(jīng)過轉(zhuǎn)換的字符串,其編碼為iso8859_1,strout是經(jīng)過轉(zhuǎn)換的字符串,其編碼為gb2312。

在apusic 0.9.5版中實現(xiàn)了java servlets 2.3規(guī)范草案,其中在servletrequest接口中新增了一個方法setcharacterencoding(string enc),可以補上在http請求中缺少的charset信息,而上面這一煩瑣的轉(zhuǎn)換過程就在servlet引擎中自動完成了,而且servlet引擎還對轉(zhuǎn)換過程做了優(yōu)化,提高了運行效率。下面給出一個簡單的例子,大家可以做一下比較。

// 傳統(tǒng)方式
<%@ page contenttype="text/html; charset=gb2312" %>
<html>
<body>
<form method=post action=test.jsp>
<input type=text name=your_name>
</form>
<%= new string(request.getparameter("your_name").getbytes("8859_1"), "gb2312") %>
</body>
</html>

// 新的方式
<%@ page contenttype="text/html; charset=gb2312" %>
<% request.setcharacterencoding("gb2312"); %>
<html>
<body>
<form method=post action=test.jsp>
<input type=text name=your_name>
</form>
<%= request.getparameter("your_name") %>
</body>
</html>  



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汽车| 红原县| 五常市| 仁化县| 蕉岭县| 南华县| 兖州市| 观塘区| 临江市| 和硕县| 永济市| 益阳市| 黄浦区| 涞水县| 湘阴县| 饶河县| 理塘县| 兖州市| 韩城市| 慈利县| 天峻县| 瓦房店市| 恩平市| 大新县| 新巴尔虎左旗| 商丘市| 清原| 华坪县| 福贡县| 通道| 汉中市| 囊谦县| 获嘉县| 建昌县| 沙坪坝区| 新干县| 惠州市| 惠州市| 东源县| 邻水| 富顺县|