java中使用url進(jìn)行編碼和解碼
使用url進(jìn)行編碼和解碼
編碼和解碼的類
java.net.URLDecoder.decode(url,解碼格式) 解碼器.解碼方法。
轉(zhuǎn)化成普通字符串,URLEncoder.decode(url,編碼格式) 將普通字符串變成指定格式的字符串
package com.zixue.springbootmybatis.test;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
/** 編碼Encode后都返回了新的字符串,編碼后的字符串不能跨平臺(tái),所以要統(tǒng)一制定編碼格式
* 需要注意的是在url中 "\" '&' '=' ':' '/'都是具有特殊意義的符號(hào),這些符號(hào)一旦被編譯后就會(huì)失去本身的
* 含義,導(dǎo)致無法被解析,
* 所以在url中需要分塊編碼,
* 解碼Decoder類中decode方法作用是變回成普通字符,其中加號(hào)會(huì)變成空格,
* */
public class testtest {
public static void main(String[] args) throws UnsupportedEncodingException {
String url = "http://www.baidu.com?name='張三'&age=18 ";
String encodeStr = URLEncoder.encode(url,"UTF-8");
System.out.println(encodeStr);
System.out.println(URLDecoder.decode(encodeStr,"UTF-8"));
}
}

js中的編碼
encodeURL(String url)作用將字符串作為url進(jìn)行編碼,是對(duì)url進(jìn)行完整編碼,所有對(duì):?@ & = 是不會(huì)進(jìn)行轉(zhuǎn)義的encodeURLComponent()作用是將字符串進(jìn)行編碼,一般用于對(duì)某個(gè)參數(shù)需要單個(gè)編譯的情況下使用,參數(shù)可以是中文
<script >
$(function(){
alert("haha");
var str = 'http://www.baidu.com?name=張三&age=18';
console.log(str);
a(str);
});
function a (s){
var h = encodeURI(s);
console.log(h);
var y = encodeURIComponent("張三");
console.log(y);
var g = "www.baidu.com?name=";
var i = encodeURIComponent("張三");
console.log(g+i);
}
</script>

Java正確URL解碼方式:URLDecoder.decode
Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u9"
at java.net.URLDecoder.decode(URLDecoder.java:194)
at com.hbzx.controller.PayResultController.main(PayResultController.java:253)
Java調(diào)用 URLDecoder.decode(str, "UTF-8"); 拋出以上的異常,其主要原因是% 在URL中是特殊字符,需要特殊轉(zhuǎn)義一下,
解決辦法
使用%25替換字符串中的%號(hào)
?url = url.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
? ?String urlStr = URLDecoder.decode(url, "UTF-8");以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java集合之Set接口及其實(shí)現(xiàn)類精解
set接口是繼承自Collection的子接口,特點(diǎn)是元素不重復(fù),存儲(chǔ)無序。在set接口的實(shí)現(xiàn)類中添加重復(fù)元素是不會(huì)成功的,判斷兩個(gè)元素是否重復(fù)根據(jù)元素類重寫的2021-09-09
java設(shè)計(jì)模式之工廠模式實(shí)例詳解
這篇文章主要介紹了java設(shè)計(jì)模式之工廠模式,結(jié)合具有實(shí)例形式分析了java工廠模式的概念、原理、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2017-09-09
解決Maven項(xiàng)目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問題
在Maven項(xiàng)目中,如果在非test目錄下使用@Test注解,可能會(huì)因?yàn)閜om.xml中<scope>test</scope>的設(shè)置而無法使用,正確做法是將測(cè)試代碼放在src/test/java目錄下,或去除<scope>test</scope>限制,這樣可以確保Junit依賴正確加載并應(yīng)用于適當(dāng)?shù)拇a部分2024-10-10
SpringBoot快速整合SpringSecurity的詳細(xì)步驟(新手都會(huì)!)
日 Spring Security 是針對(duì)Spring項(xiàng)目的安全框架,也是Spring Boot底層安全模塊默認(rèn)的技術(shù)選型,他可以實(shí)現(xiàn)強(qiáng)大的Web安全控制,下面這篇文章主要給大家介紹了關(guān)于SpringBoot快速整合SpringSecurity的詳細(xì)步驟,需要的朋友可以參考下2023-03-03
Java Socket實(shí)現(xiàn)聊天室附1500行源代碼
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。本篇文章手把手帶你通過Java Socket來實(shí)現(xiàn)自己的聊天室,大家可以在過程中查缺補(bǔ)漏,溫故而知新2021-10-10
解決ResourceBundle.getBundle文件路徑問題
這篇文章主要介紹了解決ResourceBundle.getBundle文件路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

