如何在JSP中處理中文

來源:互聯網
上載者:User
js|中文 如何在JSP中處理中文

在一個Web應用中經常需要向伺服器傳遞一些參數,一般通過form向伺服器發送一個POST請求。在參數中有可能包含中文資訊,如使用者資訊登記、購物定單中的地址資訊等等。參數字串一般用本地字元集進行編碼,如中文採用GB2312或GBK字元集,英文或西歐文字採用ISO8859_1字元集,但在Java程式中一律採用Unicode處理字串,這就需要有一個編碼轉換的過程。不幸的是,現有的大部分Java應用伺服器都是在英語國家開發出來的,由於缺乏大字元集(中文、日文、韓文等)的應用環境,這些應用伺服器在處理HTTP請求參數時都存在一些中文處理的問題,也是最為困擾JSP和Servlet開發人員的問題。

產生這一問題的根本原因是在HTTP請求中缺乏足夠的資訊來指明用戶端所使用的字元集。在一個JSP頁面中我們可以通過下面的偽指令來指明輸出頁面所使用的字元集:



JSP引擎會將上面的偽指令轉換為HTTP應答的頭部:

Content-Type: text/html; charset=GB2312

樣輸出的就是採用GB2312編碼的中文頁面,瀏覽器會正確地顯示出中文。但瀏覽器在將form的內容POST到伺服器時卻沒有包含charset,而且將中文內容用%xx的形式(xx是十六進位數)進行編碼,例如漢字"中"的GB2312內碼為0xD6D0,在HTTP請求中就變成了%D6%D0,根據RFC2616的規定,如果在HTTP請求中未指明字元集,就使用ISO8859_1編碼,這樣"中"字在處理時變成了兩個字元,分別為´u00D6´和´u00D0´,而返回到用戶端時變成了兩個不可顯示的字元,瀏覽器一般顯示成´??´。

解決這一問題的傳統做法是編寫額外的代碼來完成字元集的轉換:

strOut = new String(strIn.getBytes("8859_1"), "GB2312");

strIn是未經過轉換的字串,其編碼為ISO8859_1,strOut是經過轉換的字串,其編碼為GB2312。

在Apusic 0.9.5版中實現了Java Servlets 2.3規範草案,其中在ServletRequest介面中新增了一個方法setCharacterEncoding(String enc),可以補上在HTTP請求中缺少的charset資訊,而上面這一煩瑣的轉換過程就在Servlet引擎中自動完成了,而且Servlet引擎還對轉換過程做了最佳化,提高了運行效率。下面給出一個簡單的例子,大家可以做一下比較。

// 傳統方式
<%@ 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>  





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.