JS實(shí)現(xiàn)對(duì)中文字符串進(jìn)行utf-8的Base64編碼的方法(使其與Java編碼相同)
本文實(shí)例講述了JS實(shí)現(xiàn)對(duì)中文字符串進(jìn)行utf-8的Base64編碼的方法。分享給大家供大家參考,具體如下:
要進(jìn)行編碼的字符串:“select 用戶名 from 用戶”
使用JAVA進(jìn)行編碼,Java程序:
String sql = "select 用戶名 from 用戶"; String encodeStr = new String(Base64.encode(sql.getBytes("UTF-8"))); // 編碼 System.out.println(encodeStr);
得到:
c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw==
在Java中解碼:
sql = new String(Base64.decode(sql.getBytes()), "UTF-8");
Java代碼中為什么要使用getBytes("UTF-8")呢?因?yàn)閃indows和Linux環(huán)境下默認(rèn)編碼不同,要使你的程序在不同平臺(tái)下得到相同編碼,必然要指定編碼
雖然Html和JS的編碼都是utf-8,但JS從頁(yè)面上得到的中文編碼卻是utf-16,所以直接對(duì)中文進(jìn)行Base64編碼將得到錯(cuò)誤的結(jié)果,所以我們要先從utf-16轉(zhuǎn)到utf-8再編碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> <!-- body{ margin:0px; padding:0px; } body,td{ font-size:9pt; } --> </style> <script type="text/JavaScript"> <!-- var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; //將Ansi編碼的字符串進(jìn)行Base64編碼 function encode64(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; do { 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 + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return output; } //將Base64編碼字符串轉(zhuǎn)換成Ansi編碼的字符串 function decode64(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; if (input.length % 4 != 0) { return ""; } var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) { return ""; } do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = 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 += String.fromCharCode(chr2); } if (enc4 != 64) { output += String.fromCharCode(chr3); } chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return output; } function utf16to8(str) { var out, i, len, c; out = ""; len = str.length; for(i = 0; i < len; i++) { c = str.charCodeAt(i); if ((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out; } function utf8to16(str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; while(i < len) { c = str.charCodeAt(i++); switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += str.charAt(i-1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } } return out; } // 測(cè)試代碼 開(kāi)始 var de = encode64(utf16to8("select 用戶名 from 用戶")); document.writeln(de+"<br>"); var ee = utf8to16(decode64(de)) document.writeln(ee); // 測(cè)試代碼 結(jié)束 //--> </script> </head> <body> </body> </html>
上面的代碼都是從網(wǎng)上得來(lái),拼湊后得到正確結(jié)果,在此感謝前輩們
PS:這里再為大家推薦幾款base64編碼解碼在線工具,相信在以后的開(kāi)發(fā)中會(huì)用得到:
BASE64編碼解碼工具:
http://tools.jb51.net/transcoding/base64
在線圖片轉(zhuǎn)換BASE64工具:
http://tools.jb51.net/transcoding/img2base64
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫(huà)特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- Java中的base64編碼器
- java中Base64編碼原理實(shí)例講解
- java base64編碼、解碼的三種方式總結(jié)
- Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換
- java使用Base64編碼實(shí)例
- Java JDK1.7對(duì)字符串的BASE64編碼解碼方法
- java自定義實(shí)現(xiàn)base64編碼轉(zhuǎn)換
- Java實(shí)現(xiàn)BASE64編碼和解碼的方法
- Java實(shí)現(xiàn)圖片與Base64編碼互轉(zhuǎn)
- 簡(jiǎn)潔實(shí)用的Java Base64編碼加密異常處理類(lèi)代碼
- JAVA實(shí)現(xiàn)Base64編碼的三種方式
相關(guān)文章
JS實(shí)現(xiàn)JSON.stringify的實(shí)例代碼講解
JSON.stringify是瀏覽器高版本帶的一個(gè)將JS的Objtect對(duì)象轉(zhuǎn)換為JSON字符串的一個(gè)方法,不過(guò)再I(mǎi)E6下面,并不存在JSON這一對(duì)象,因此,用到此方法時(shí),需要寫(xiě)一套兼容性的代碼。接下來(lái)通過(guò)本文給大家分享JS實(shí)現(xiàn)JSON.stringify的實(shí)例代碼,需要的朋友參考下吧2017-02-02js獲取元素相對(duì)窗口位置的實(shí)現(xiàn)代碼
這篇文章主要介紹了js獲取元素相對(duì)窗口位置的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09Locate a File Using a File Open Dialog Box
Locate a File Using a File Open Dialog Box...2007-06-06幾種延遲加載JS代碼的方法加快網(wǎng)頁(yè)的訪問(wèn)速度
如何延遲javascript代碼的加載,加快網(wǎng)頁(yè)的訪問(wèn)速度,為了讓我們的網(wǎng)頁(yè)加載速度更快,本文總結(jié)了一下幾個(gè)注意點(diǎn),感興趣的朋友可以參考下2013-10-10在標(biāo)題欄顯示新消息提示,很多公司項(xiàng)目中用到這個(gè)方法
在標(biāo)題欄顯示新消息提示,很多公司項(xiàng)目中用到這個(gè)方法,需要的朋友可以參考下。2011-11-11JS獲取今天是本月第幾周、本月共幾周、本月有多少天、是今年的第幾周、是今年的第幾天的示例代碼
這篇文章主要介紹了JS獲取今天是本月第幾周、本月共幾周、本月有多少天、是今年的第幾周、是今年的第幾天,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12學(xué)前端,css與javascript重難點(diǎn)淺析
JavaScript是一種屬于網(wǎng)絡(luò)的腳本語(yǔ)言,已經(jīng)被廣泛用于Web應(yīng)用開(kāi)發(fā),CSS(Cascading Style Sheet)層疊樣式表單,今天給大家分享css與javascript重難點(diǎn),感興趣的朋友一起看看吧2020-06-06JS實(shí)現(xiàn)評(píng)價(jià)的星星功能
這篇文章主要介紹了JS實(shí)現(xiàn)評(píng)價(jià)的星星功能,需要的朋友可以參考下2017-08-08JS實(shí)現(xiàn)動(dòng)態(tài)給標(biāo)簽控件添加事件的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)動(dòng)態(tài)給標(biāo)簽控件添加事件的方法,結(jié)合實(shí)例形式分析了javascript簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)添加事件的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05