亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

java使用URLDecoder和URLEncoder對中文字符進行編碼和解碼

瀏覽:64日期:2022-08-28 15:19:44

摘要:

URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之間的相互轉(zhuǎn)換。在本文中,我們以使用URLDecoder解決GET請求中文亂碼問題為場景說明 URLDecoder/URLEncoder 的用法,并給出了 application/x-www-form-urlencoded MIME 字符串的編碼規(guī)則。

一. URLDecoder/URLEncoder 使用場景概述

URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之間的相互轉(zhuǎn)換。在介紹 application/x-www-form-urlencoded MIME 字符串之前,我們先考慮如下場景,如下圖所示:

java使用URLDecoder和URLEncoder對中文字符進行編碼和解碼

我們知道,在我們向客戶端發(fā)起請求時,瀏覽器會根據(jù)請求URL生成相應(yīng)的請求報文發(fā)送給服務(wù)器。在這個過程中,如果我們在瀏覽器中的地址欄中所輸入的URL包含中文字符時,瀏覽器首先會將這些中文字符進行編碼然后再發(fā)送給服務(wù)器。實際上,瀏覽器會將它們轉(zhuǎn)換為 application/x-www-form-urlencoded MIME 字符串,如下圖所示:

java使用URLDecoder和URLEncoder對中文字符進行編碼和解碼

更確切的,當URL地址里包含非西歐字符的字符串時,瀏覽器都會將這些非西歐字符串轉(zhuǎn)換成application/x-www-form-urlencoded MIME 字符串。在開發(fā)過程中,我們可能涉及將普通字符串和這種特殊字符串的相關(guān)轉(zhuǎn)換,這就需要使用 URLDecoder 和 URLEncoder類進行實現(xiàn),其中:

URLDecoder類包含一個decode(String s,String enc)靜態(tài)方法,它可以將application/x-www-form-urlencoded MIME字符串轉(zhuǎn)成普通字符串; URLEncoder類包含一個encode(String s,String enc)靜態(tài)方法,它可以將普通字符串轉(zhuǎn)換成application/x-www-form-urlencoded MIME字符串。

下面程序示范了普通字符串轉(zhuǎn)與 application/x-www-form-urlencoded MIME 字符串之間的轉(zhuǎn)化。

public class URLDecoderTest { public static void main(String[] args) throws Exception { // 將application/x-www-form-urlencoded字符串轉(zhuǎn)換成普通字符串 // 其中的字符串直接從上圖所示窗口復(fù)制過來,chrome 默認用 UTF-8 字符集進行編碼,所以也應(yīng)該用對應(yīng)的字符集解碼 System.out.println('采用UTF-8字符集進行解碼:'); String keyWord = URLDecoder.decode('%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico', 'UTF-8'); System.out.println(keyWord); System.out.println('n 采用GBK字符集進行解碼:'); System.out.println(URLDecoder.decode('%E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6+Rico', 'GBK')); // 將普通字符串轉(zhuǎn)換成application/x-www-form-urlencoded字符串 System.out.println('n 采用utf-8字符集:'); String urlStr = URLEncoder.encode('天津大學(xué)', 'utf-8'); System.out.println(urlStr); System.out.println('n 采用GBK字符集:'); String urlStr2 = URLEncoder.encode('天津大學(xué)', 'GBK'); System.out.println(urlStr2); }}/* Output: 采用UTF-8字符集進行解碼: 天津大學(xué) Rico 采用GBK字符集進行解碼: 澶╂觸澶у? Rico 采用utf-8字符集: %E5%A4%A9%E6%B4%A5%E5%A4%A7%E5%AD%A6 采用GBK字符集: %CC%EC%BD%F2%B4%F3%D1%A7 *///:~

特別地,僅包含西歐字符的普通字符串和application/x-www-form-urlencoded MIME字符串無須轉(zhuǎn)換,而包含中文字符的普通字符串則需要轉(zhuǎn)換,轉(zhuǎn)換的方法是每個中文字符占2個字節(jié),每個字節(jié)可以轉(zhuǎn)換成2個十六進制的數(shù)字,所以每個中文字符將轉(zhuǎn)換成“%XX%XX”的形式。當然,采用不同的字符集時,每個中文字符對應(yīng)的字節(jié)數(shù)并不完全相同,所以使用URLEncoder和URLDecoder進行轉(zhuǎn)換時也需要指定字符集。特別地,字符串應(yīng)以同樣的字符集進行編碼和解碼,否則會產(chǎn)生意想不到的結(jié)果,如上述程序示例所示。

二. 解決GET請求中文亂碼問題

URLDecoder的一個應(yīng)用場景就是解決GET請求的中文亂碼問題,如下述代碼所示:

<%@page import='java.net.URLDecoder'%><%@ page language='java' import='java.util.*' pageEncoding='UTF-8'%><html><head> <title>Test</title></head><body> <% String param1 = request.getQueryString(); String param2 = URLDecoder.decode(param1, 'utf-8'); out.print(param2.split('=')[1] + '<br>'); %></body></html>

特別需要注意的是,使用此方式對GET請求參數(shù)進行解碼時,我們必須先對 request.getQueryString 方法的返回值(例如,“name=摩羯西門吹雪”)進行解碼,然后再從中取出我們所需要的參數(shù)值。如果先取出參數(shù)值,然后再對參數(shù)值進行解碼,則我們將得到亂碼,如下圖所示:

java使用URLDecoder和URLEncoder對中文字符進行編碼和解碼

此外,對于包含中文字符的POST請求參數(shù),我們只需在獲取請求參數(shù)前通過以下代碼語句進行轉(zhuǎn)碼即可:

request.setCharacterEncoding('utf-8');

三. URLEncoder & URLDecoder

對 String 編碼時,使用以下規(guī)則:

字母、數(shù)字和字符, “a” 到 “z”、”A” 到 “Z” 和 “0” 到 “9” 保持不變; 特殊字符 “.”、”-“、”*” 和 “_” 保持不變; 空格字符 ” ” 轉(zhuǎn)換為一個加號 “+”。

除此之外,所有的其他字符都是不安全的。因此需要使用一些編碼機制將它們轉(zhuǎn)換為一個或多個字節(jié),每個字節(jié)用一個包含 3 個字符的字符串 “%xy” 表示,其中 xy 為該字節(jié)的兩位十六進制表示形式,推薦的編碼機制是 UTF-8。例如,使用 UTF-8 編碼機制,字符串 “The string ü@foo-bar” 將轉(zhuǎn)換為 “The+string+%C3%BC%40foo-bar”,因為在 UTF-8 中,字符 ü 編碼為兩個字節(jié),C3 (十六進制)和 BC (十六進制),字符 @ 編碼為一個字節(jié) 40 (十六進制)。

 關(guān)于 URLDecoder 類的使用,轉(zhuǎn)換過程正好與 URLEncoder 類使用的過程相反,此不贅述。

關(guān)于JSP中文亂碼更多的介紹,包括 頁面亂碼、參數(shù)亂碼、表單亂碼、源文件亂碼 等知識,見我的另外兩篇博客:《JSP中文亂碼問題終極解決方案(上)》 和 《JSP中文亂碼問題終極解決方案(下)》。

引用

使用URLDecoder和URLEncoder對中文進行處理

到此這篇關(guān)于java使用URLDecoder和URLEncoder對中文字符進行編碼和解碼的文章就介紹到這了,更多相關(guān)java 文字符編碼解碼內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 黄色片视频国产 | 新香蕉视频在线 | 日韩a级毛片 | 精品日韩一区二区三区视频 | 国产精品你懂的在线播放调教 | 久草在线视频免费资源观看 | 1024亚洲天堂 | 伊人蕉久影院 | 午夜羞羞视频在线观看 | 亚洲一区二区三区四区视频 | 亚洲国产一区二区三区综合片 | 黄在线观看在线播放720p | 久久99精品一久久久久久 | 一区二区三区不卡免费视频97 | 免费在线一级毛片 | 九九热精 | 96精品| 亚洲最大情网站在线观看 | 国产成人v视频在线观看 | 免费区一级欧美毛片 | 91国内精品线免费播放 | 欧美成人国产一区二区 | 特黄特级a级黄毛片免费观看多人 | 国产精品视频国产永久视频 | 男人午夜免费视频 | 欧美日韩一品道 | 亚洲欧美日韩综合二区三区 | 欧美簧片 | 国产精品久久久久影院色老大 | 19国产精品麻豆免费观看 | 全色黄大色大片免费久久老太 | 91你懂得| 日韩精品久久一区二区三区 | 日韩不卡高清视频 | 在线成h人视频网站免费观看 | 成人精品国产 | 手机在线一区二区三区 | 伊人色综合久久天天伊 | 亚洲欧美精品国产一区色综合 | 毛片激情 | 正在播放国产酒店露脸 |