js轉換字符串為base64位

在window對象下有兩個api,可以對ASCII編碼進行編譯,得到base64位的字符串

clipboard.png

  1. btoa:編碼為base64
  2. atob:解碼為ASCII碼

此種方法不能對中文進行操作,因為ASCII碼中沒有中文,如果編碼會得到亂碼

要編碼中文可以先用encodeURIComponent() 對字符串進行轉義,轉義后再btoa()成base64就可以,
用atob()解碼后再調用decodeURIComponent()得到原來的字符

兼容性:不兼容ie9及以下老版本

兼容ie9以下需要自己封裝:
參考>> js設置一個字符串為base64格式

var Base64 = {// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",// public method for encoding
encode : function (input) {var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;input = Base64._utf8_encode(input);while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);}return output;
},// public method for decoding
decode : function (input) {var output = "";var chr1, chr2, chr3;var enc1, enc2, enc3, enc4;var i = 0;input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");while (i < input.length) {enc1 = this._keyStr.indexOf(input.charAt(i++));enc2 = this._keyStr.indexOf(input.charAt(i++));enc3 = this._keyStr.indexOf(input.charAt(i++));enc4 = this._keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output = output + String.fromCharCode(chr2);}if (enc4 != 64) {output = output + String.fromCharCode(chr3);}}output = Base64._utf8_decode(output);return output;},// private method for UTF-8 encoding
_utf8_encode : function (string) {string = string.replace(/\r\n/g,"\n");var utftext = "";for (var n = 0; n < string.length; n++) {var c = string.charCodeAt(n);if (c < 128) {utftext += String.fromCharCode(c);}else if((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);}else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}return utftext;
},// private method for UTF-8 decoding
_utf8_decode : function (utftext) {var string = "";var i = 0;var c = c1 = c2 = 0;while ( i < utftext.length ) {c = utftext.charCodeAt(i);if (c < 128) {string += String.fromCharCode(c);i++;}else if((c > 191) && (c < 224)) {c2 = utftext.charCodeAt(i+1);string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));i += 2;}else {c2 = utftext.charCodeAt(i+1);c3 = utftext.charCodeAt(i+2);string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;}}return string;
}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 文件下載,中文表名,中文內容

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

簡述 git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作。例如&#xff0c;假設我們有個穩定版本的分支&#xff0c;叫v2.0&#xff0c;另外還有個開發版本的分支v3.0&#xff0c;我們不能直接把兩個分支合并&#xff0c;這樣會導致穩定版本混亂&#xff0c…

Docker 二進制安裝docker

https://blog.csdn.net/bruce_yds/article/details/80035714轉載于:https://www.cnblogs.com/Presley-lpc/p/9698724.html

264,avs重要的變量:

B幀&#xff1a; B8pdir[i] i為0,1,2,3&#xff1b;值的含義&#xff1a;0&#xff1a;前向 &#xff1b;1&#xff1a;后向&#xff1b;2&#xff1a;雙向&#xff1b;如果為intra_block,則為-1. B8mode[i] i為0,1,2,3 &#xff0c;值的含義&#xff1a;1:16x16 2:16x8 3…

insert into 語句的三種寫法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 insert into 語句的三種寫法 方式1、 INSERT INTO t1(field1,field2) VALUE(v001,v002); // 明確只插入一條Value 方式2、 IN…

Linux系統中跟TCP相關的內核參數

1. TCP保活機制 參考 《Nginx(三) 配置文件詳解 - 基礎模塊》3.18章節 net.ipv4.tcp_keepalive_intvl&#xff1a;設置兩次相鄰探活檢測的間隔時間。默認是75秒&#xff0c;單位是秒。net.ipv4.tcp_keepalive_probes&#xff1a;設置探活最多檢測次數。默認是9次&#xff0c;單…

ECMAScript3中數組方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中數組方法</title></head><body><script>//字符串和數組之間相轉換的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一個對象序列化的接口&#xff0c;一個類只有實現了Serializable接口&#xff0c;它的對象才是可序列化的。因此如果要序列化某些類的對象&#xff0c;這些類就必須實現Serializable接口。而實際上&#xff0c;Serializable是一個空接口&#xff0c;沒有什么具體…

Codeforces 1045. A. Last chance(網絡流 + 線段樹優化建邊)

題意 給你 \(n\) 個武器&#xff0c;\(m\) 個敵人&#xff0c;問你最多消滅多少個敵人&#xff0c;并輸出方案。 總共有三種武器。 SQL 火箭 - 能消滅給你集合中的一個敵人 \(\sum |S| \le 100000\) &#xff1b;認知光束 - 可以消滅 \([l, r]\) 區間中的一個敵人&#xff1b;O…

常用宏定義 - 系統相關

/** 是否iPad */ #define isPad (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)/** 是否iPad */ #define someThing (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)? ipad: iphone/** 獲取系統版本 */ #define IOS_VERSION &#xff3b;[UIDevice currentDevi…

周鴻祎詳解360手機戰略:賺錢不靠硬件靠服務

摘要&#xff1a;奇虎360總裁周鴻祎不久前在微博上宣布360公司將要進軍手機行業的消息后&#xff0c;一度掀起業界的軒然大波&#xff0c;褒貶之聲均不絕于耳。對于合作廠商的選擇&#xff0c;周鴻祎直言出貨量是一個重要參考指標&#xff0c;“每年的出貨量最少不低于500萬~10…

解決報錯:;Syntax error on token(s), misplaced construct(s)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff0c;這是語法錯誤&#xff0c;如括號不匹配、代碼沒有寫在一個方法中、少分號、變量名不對、少半個大括號 ... 總之就…

java移位運算符

java中有三種移位運算符 << : 左移運算符&#xff0c;num << 1 相當于num乘以2 >> : 右移運算符&#xff0c;num >> 1 相當于num除以2 >>> : 無符號右移&#xff0c;忽略符號位&#xff0c;空位都以0補齊…

在頁面上顯示PDF

/// <summary>/// 讀取PDF文件/// </summary>/// <param name"fName">文件名稱(可以從其他地方傳進來)</param>/// <returns></returns>public FileStreamResult readPDF(string fName "pdf文件.pdf"){string dirp …

7.15模擬賽

T1.fuction 吐槽一波錯誤拼寫。 跟考場思路差不多&#xff0c;只不過細節挺多的呢。 判掉a0,b0,c0的幾種組合&#xff0c;還有負數的情況要打標記特殊處理。 然后就是一個拓歐啦&#xff0c;先求出ggcd(a,b)&#xff0c;順便求出axbyg的x和y&#xff0c;然后根據裴蜀定理&#…

蘇寧國美盈利報警:線下乏力線上重金加碼

摘要&#xff1a;國美電器則發布盈利預警&#xff0c;預計今年一季度凈利潤同比大幅減少———這也致使國美股價最近連續低位徘徊。蘇寧電器一季報顯示&#xff0c;今年1至3月公司營業收入226 .41億元&#xff0c;同比增長10%&#xff0c;但盈利9.51億元&#xff0c;同比下降15…

WebService到底是什么?

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、序言 大家或多或少都聽過WebService&#xff08;Web服務&#xff09;&#xff0c;有一段時間很多計算機期刊、書籍和網站都大肆的提…

JAVA中PO,VO,DTO,BO,DAO,POJO解釋

&#xff08;一&#xff09;VO與PO ORM是Object Relational Mapping&#xff08;對象關系映射&#xff09;的縮寫。通俗點講&#xff0c;就是將對象與關系數據庫綁定&#xff0c;用對象來表示關系數據。在O/R Mapping的世界里&#xff0c;有兩個基本的也是重要的東東需要了解&…

互掐盜播風云再起 三大視頻網站存和解可能

摘要&#xff1a;近期&#xff0c;視頻網站互掐盜播風云再起。騰訊視頻已于5月13日向PPS開炮&#xff0c;宣稱PPS盜播其五部獨家劇&#xff1b;5月14日&#xff0c;搜狐視頻亦指責PPS盜播其23部熱播劇。面對這兩家的連續開炮&#xff0c;PPS方面也進行了相應的回應&#xff0c;…

springboot和quartz整合實現動態定時任務(持久化單節點)

Quartz是一個完全由java編寫的開源作業調度框架,為在Java應用程序中進行作業調度提供了簡單卻強大的機制&#xff0c;它支持定時任務持久化到數據庫&#xff0c;從而避免了重啟服務器時任務丟失&#xff0c;支持分布式多節點&#xff0c;大大的提高了單節點定時任務的容錯性。s…