摘要:注意點(diǎn)如果所示,上面說(shuō)到的編碼解碼方法并不支持中文,因?yàn)樗鼈冎恢С志幋a。轉(zhuǎn)換編碼中文進(jìn)行轉(zhuǎn)碼之后在編碼。最優(yōu)方案在某些情況下,用了上面的方法也會(huì)出現(xiàn)中文亂碼的情況,如獲取到的音樂(lè)歌詞解析出來(lái)的歌詞等。
為什么要編碼
簡(jiǎn)單粗暴的解釋就是為了數(shù)據(jù)的安全性。
編碼/解碼常用方法(僅針對(duì)Base64)編碼
我們一般使用 window.btoa() 對(duì)原始數(shù)據(jù)進(jìn)行編碼。
解碼
我們一般使用 window.atob() 對(duì)編碼過(guò)后的數(shù)據(jù)進(jìn)行編碼。
注意點(diǎn)
如果所示,上面說(shuō)到的編碼/解碼方法并不支持中文,因?yàn)樗鼈冎恢С?b>ASCII 編碼。
但是在實(shí)際開(kāi)發(fā)中,前后端要傳遞的數(shù)據(jù)通常不可能只有英文或者數(shù)字的。那么一旦我們要編碼或者說(shuō)解碼的時(shí)候出現(xiàn)了中文字符串怎么辦呢?
由于btoa()跟atob()只支持ASCII 編碼,所以我們可以先將帶中文的字符串轉(zhuǎn)碼成ASCII 編碼,這里要用到兩種方法,encodeURIComponent 與 decodeURIComponent, 然后再進(jìn)行編碼/解碼操作,這樣就可以解決不支持中文的問(wèn)題。
轉(zhuǎn)換 ASCII 編碼
window.btoa(encodeURIComponent("中文")) 進(jìn)行轉(zhuǎn)碼之后在編碼。
decodeURIComponent(window.atob("JUU0JUI4JUFEJUU2JTk2JTg3")) 對(duì)數(shù)據(jù)進(jìn)行解碼。
最優(yōu)方案
在某些情況下,用了上面的方法也會(huì)出現(xiàn)中文亂碼的情況,如GitHub API獲取到的README、QQ音樂(lè)歌詞API解析出來(lái)的歌詞等。
如果出現(xiàn)了這種情況,我們可以使用 unescape() 跟 escape() 方法對(duì)做過(guò)解碼/編碼處理的數(shù)據(jù)進(jìn)行utf-8再解碼/編碼。語(yǔ)法如下:
window.btoa(unescape(encodeURIComponent(str))) //編碼 decodeURIComponent(escape(window.atob(str))) // 解碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97475.html
摘要:當(dāng)然,也可自己寫(xiě)一個(gè)轉(zhuǎn)換函數(shù),按照一定規(guī)則便行為編碼的字節(jié),如下例中國(guó)結(jié)果中國(guó)結(jié)果結(jié)果通過(guò)簡(jiǎn)單的函數(shù),就可以完成編碼到編碼的轉(zhuǎn)換,進(jìn)而完成寬字節(jié)字符到編碼的轉(zhuǎn)換。 前端開(kāi)發(fā)過(guò)程中會(huì)接觸各種各樣的編碼,比較常見(jiàn)的主要是 UTF-8 和 HTML 實(shí)體編碼,但是 web 前端的世界卻不止這兩種編碼,而且編碼的選擇也會(huì)造成一定的問(wèn)題,如前后端開(kāi)發(fā)過(guò)程中不同編碼的兼容、多字節(jié)編碼可能會(huì)造成的 ...
摘要:是一種能將任意資料用種字元組合成字串的方法,而這個(gè)資料和字串資料彼此之間是可以互相轉(zhuǎn)換的,十分方便。實(shí)際測(cè)試編碼與解碼速度的話,提供的,要比套件提供的還要快至少倍,比提供的還要快至少倍。 Base64是一種能將任意Binary資料用64種字元組合成字串的方法,而這個(gè)Binary資料和字串資料彼此之間是可以互相轉(zhuǎn)換的,十分方便。在實(shí)際應(yīng)用上,Base64除了能將Binary資料可視化之外...
摘要:模塊提供了在二進(jìn)制數(shù)據(jù)和可打印字符間編解碼的功能,包括中定義的等編碼??蓱?yīng)用于生成安全的或文件系統(tǒng)編碼場(chǎng)景中。等同于對(duì)類字節(jié)對(duì)象或純字符組成的字符串進(jìn)行標(biāo)準(zhǔn)解碼,返回解碼后的字節(jié)序列。 base64模塊提供了在二進(jìn)制數(shù)據(jù)和可打印ASCII字符間編解碼的功能,包括RFC3548中定義的Base16, Base32, Base64, Ascii85, Base85等編碼。 RFC3548中...
摘要:字符集編碼就是對(duì)字符根據(jù)不同字符集中對(duì)應(yīng)的格式進(jìn)行編碼解碼,這個(gè)大家都好理解。下面詳細(xì)說(shuō)說(shuō),以編碼解碼和編碼解碼為例。 《來(lái)自羅志曉的筆記:http://note.youdao.com/notesh...》我們平時(shí)老說(shuō)的編碼解碼,很多人都只知道 字符集編碼解碼。其實(shí)除了字符集編碼解碼,常見(jiàn)的還有另一類,如 Url編碼解碼、Base64編碼解碼。這兩類編碼的原理是完全不一樣的,如果沒(méi)有了...
閱讀 2787·2021-11-19 11:30
閱讀 3069·2021-11-15 11:39
閱讀 1793·2021-08-03 14:03
閱讀 1999·2019-08-30 14:18
閱讀 2055·2019-08-30 11:16
閱讀 2169·2019-08-29 17:23
閱讀 2611·2019-08-28 18:06
閱讀 2545·2019-08-26 12:22