电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

摘要:

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

一. URLDecoder/URLEncoder 使用場景概述

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

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

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

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

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

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

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

public class URLDecoderTest { public static void main(String[] args) throws Exception { // 將application/x-www-form-urlencoded字符串轉換成普通字符串 // 其中的字符串直接從上圖所示窗口復制過來,chrome 默認用 UTF-8 字符集進行編碼,所以也應該用對應的字符集解碼 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')); // 將普通字符串轉換成application/x-www-form-urlencoded字符串 System.out.println('n 采用utf-8字符集:'); String urlStr = URLEncoder.encode('天津大學', 'utf-8'); System.out.println(urlStr); System.out.println('n 采用GBK字符集:'); String urlStr2 = URLEncoder.encode('天津大學', 'GBK'); System.out.println(urlStr2); }}/* Output: 采用UTF-8字符集進行解碼: 天津大學 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字符串無須轉換,而包含中文字符的普通字符串則需要轉換,轉換的方法是每個中文字符占2個字節,每個字節可以轉換成2個十六進制的數字,所以每個中文字符將轉換成“%XX%XX”的形式。當然,采用不同的字符集時,每個中文字符對應的字節數并不完全相同,所以使用URLEncoder和URLDecoder進行轉換時也需要指定字符集。特別地,字符串應以同樣的字符集進行編碼和解碼,否則會產生意想不到的結果,如上述程序示例所示。

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

URLDecoder的一個應用場景就是解決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請求參數進行解碼時,我們必須先對 request.getQueryString 方法的返回值(例如,“name=摩羯西門吹雪”)進行解碼,然后再從中取出我們所需要的參數值。如果先取出參數值,然后再對參數值進行解碼,則我們將得到亂碼,如下圖所示:

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

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

request.setCharacterEncoding('utf-8');

三. URLEncoder & URLDecoder

對 String 編碼時,使用以下規則:

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

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

 關于 URLDecoder 類的使用,轉換過程正好與 URLEncoder 類使用的過程相反,此不贅述。

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

引用

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 海南在线 海南一家| 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 真丝围巾|真丝丝巾|羊绒围巾|围巾品牌|浙江越缇围巾厂家定制 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 大型工业风扇_工业大风扇_大吊扇_厂房车间降温-合昌大风扇 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 车载加油机品牌_ 柴油加油机厂家 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 |