九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用 URLDecoder 和 URLEncoder 對中文字符進(jìn)行編碼和解碼【面試+工作】


使用 URLDecoder 和 URLEncoder 對中文字符進(jìn)行編碼和解碼【面試+工作】

摘要:

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 字符串之前,我們先考慮如下場景,如下圖所示:

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

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

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

  • URLEncoder類包含一個(gè)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)化。

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


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

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

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

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

三. URLEncoder & URLDecoder

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

  • 字母、數(shù)字和字符, “a” 到 “z”、”A” 到 “Z” 和 “0” 到 “9” 保持不變;

  • 特殊字符 “.”、”-“、”*” 和 “_” 保持不變;

  • 空格字符 ” ” 轉(zhuǎn)換為一個(gè)加號 “+”。

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

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

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
URL編碼java
java.net.URLEncode編碼 與 URLDecode解碼問題
JavaScript利用URL向后臺傳入中文參數(shù)亂碼問題解決之道!
[js編碼java解碼][java編碼js解碼][java中的URLEncoder.encode對應(yīng)JS中用decodeURIComponent] | 陳飛的博客
JSP編碼以及亂碼解決總結(jié)
java.net.URLEncode編碼與URLDecode解碼問題-明明的日志...
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服