編碼

TextEncoder, TextDecoder(實驗中的功能)

base64 編解碼

Base64編碼作用:由于某些系統(tǒng)中只能使用ASCII字符。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。
base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)。在前端通常用于圖片和icon的編碼,

escape/unescape(已廢棄 encodeURI替代)

針對寬字符做unicode編碼,并針對碼值做十六進制編碼,所以使用escape針對漢字編碼會得到形 如”\uxxxx”的結(jié)果;
該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對下面這些 ASCII 標(biāo)點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉(zhuǎn)義序列替換;
document.write(escape("http://www.w3school.com.cn/") + "<br />")
document.write(escape("?!=()#%&"))
輸出:
http%3A//www.w3school.com.cn
%3F%21%3D%28%29%23%25%26

encodeURI()/decodeURI()

可把字符串作為 URI 進行編碼。( URI 中具有特殊含義的 ASCII 標(biāo)點符號,encodeURI() 函數(shù)是不會進行轉(zhuǎn)義,如:" ; , / ? : @ & = + $ # ")
該方法不會對 ASCII 字母和數(shù)字(A-Z a-z 0-9)進行編碼,也不會對這些 ASCII 標(biāo)點符號進行編碼,如: - _ . ! ~ * ' ( ) 。

應(yīng)用場景:期望獲取一個可用的URL地址時,使用此方法進行編碼。
document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />")
document.write(encodeURI("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(";,/?:@&=+$#"))
輸出:
http://www.w3school.com.cn/
http://www.w3school.com.cn/My%20first/
;,/?:@&=+$#

若使用 encodeURIComponent進行編碼,則無法得到一個可正常工作的鏈接??捎脤⒕幋a后的地址,粘貼到瀏覽器進行驗證。
encodeURIComponent("http://www.example.org/a file with spaces.html")
編碼結(jié)果
http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html

encodeURIComponent / decodeURIComponent

encodeURIComponent()是對統(tǒng)一資源標(biāo)識符(URI)的組成部分進行編碼的方法,而不用對整個URL進行編碼。
在 encodeURI() 中不被編碼的符號" ; , / ? : @ & = + $ # ",encodeURIComponent()都會進行編碼。(可以觀察到,都是一些常見的網(wǎng)絡(luò)協(xié)議標(biāo)志,如,“/@?&#'”)
該方法不會對 ASCII 字母和數(shù)字(A-Z a-z 0-9)進行編碼,也不會對這些 ASCII 標(biāo)點符號進行編碼: - _ . ! ~ * ' ( ) 。

提示和注釋
提示:請注意 encodeURIComponent() 函數(shù) 與 encodeURI() 函數(shù)的區(qū)別之處,前者假定它的參數(shù)是 URI 的一部分(比如協(xié)議、主機名、路徑或查詢字符串)。因此 encodeURIComponent() 函數(shù)將轉(zhuǎn)義用于分隔 URI 各個部分的標(biāo)點符號。
應(yīng)用場景:當(dāng)需要對URL的參數(shù)進行編碼時,使用encodeURIComponent()。
document.write(encodeURIComponent("http://www.w3school.com.cn/"))
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write(encodeURIComponent(",/?:@&=+$#"))
輸出:
http%3A%2F%2Fwww.w3school.com.cn
http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23

encodeURI與encodeURIComponent 不同點

1、對字符的編碼方式不同。可參考下圖


20210723082030.png

2、應(yīng)用場景不同
url里面的query 如果有類似username='a&foo=boo'這種,由于服務(wù)器根據(jù)&和=來識別query的key和value,就會產(chǎn)生歧義。
a&foo=boo需要被當(dāng)成一個整體,所以需要用encodeURI去轉(zhuǎn)義;
encodeURIComponent轉(zhuǎn)義范圍更大;

charCodeAt() / fromCharCode()

對字符進行 Unicode 編碼、解碼。
不足: 采用\uxxxx表示一個字符,其中xxxx表示字符碼點;但只限于\u0000—\uFFFF之間的字符,超出這個范圍的字符,將用2個雙字節(jié)形式表示;如:\uD824\uDFB7 表示“吉”;
如果\u后面是超過0xFFFF的數(shù)值(如:\u20BB7),JS將理解為\u20BB+7。返回值為“ 7”;

codePointAt() / fromCodePoint()

可識別32位的UTF-16字符;ES6只要將碼點放入大括號,就能正確解讀該字符串;如:\u{20BB7} 表示“吉”;
大括號表示法與4個字符的UTF-16等價:如:

\u{20BB7} === \uD842\uDFB7    //  true

ES6的codePointAt,可以正確處理4個字節(jié)存儲的字符,返回一個字符碼點;
codePointAt返回的碼點是十進制值,要轉(zhuǎn)成16進制,可用toString方法;
如:s.codePointAt(0).toString(16);
應(yīng)用: 判斷一個字符是由2個字節(jié)還是4個字節(jié)組成;

function is32Bit(c){
  return c.codePointAt(0) > 0xFFFF;
}
is32Bit('吉') //  true
is32Bit('a')  //  false
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容