UTF8编码与解码:
function encodeUTF8(str){
var temp = "",rs = "";
for( var i=0 , len = str.length; i < len; i++ ){
temp = str.charCodeAt(i).toString(16);
rs += "\\u"+ new Array(5-temp.length).join("0") + temp;
}
return rs;
}
function decodeUTF8(str){
return str.replace(/(\\u)(\w{4}|\w{2})/gi, function($0,$1,$2){
return String.fromCharCode(parseInt($2,16));
});
}
console.log(encodeUTF8("123olp=-+*/中国"));
console.log(decodeUTF8(encodeUTF8("123olp=-+*/中国")));
结果:
\u0031\u0032\u0033\u006f\u006c\u0070\u003d\u002d\u002b\u002a\u002f\u4e2d\u56fd
123olp=-+*/中国
字符串转16进制
//(只能是英文数字,不能是汉字等,编码出来乱码)
function strToHexCharCode(str) {
if(str === "")
return "";
var hexCharCode = [];
hexCharCode.push("0x");
for(var i = 0; i < str.length; i++) {
hexCharCode.push((str.charCodeAt(i)).toString(16));
}
return hexCharCode.join("");
}
console.log(strToHexCharCode("ss11*-+中国人民"));
//16进制转字符串
function hexCharCodeToStr(hexCharCodeStr) {
var trimedStr = hexCharCodeStr.trim();
var rawStr = trimedStr.substr(0,2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
var len = rawStr.length;
if(len % 2 !== 0) {
alert("Illegal Format ASCII Code!");
return "";
}
var curCharCode;
var resultStr = [];
for(var i = 0; i < len;i = i + 2) {
curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
resultStr.push(String.fromCharCode(curCharCode));
}
return resultStr.join("");
}
console.log(hexCharCodeToStr(strToHexCharCode("ss11*-+中国人民")));
结果:
0x737331312a2d2b4e2d56fd4eba6c11
ss11*-+N-VýNºl
ASCII与Base64转换
let encodedData = window.btoa("ss11*-+999"); // 编码//ascii->base64 //(只能是英文数字,不能是汉字等,如果是汉字就报错)
let decodedData = window.atob(encodedData); // 解码//base64->ascii
console.log(encodedData);
console.log(decodedData);
结果:
c3MxMSotKzk5OQ==
ss11*-+999
利用escape()函数
//escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
// 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
//也就是说不能编码网址等
var b=escape("中国人112ppp*-/++-`www.baidu.com");
console.log(b);
console.log(unescape(b));
结果:
%u4E2D%u56FD%u4EBA112ppp*-/++-%60www.baidu.com
中国人112ppp*-/++-`www.baidu.com
简单的加密解密的函数
function compile(code) {
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
return(escape(c));
}
function uncompile(code) {
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
}
return c;
}
console.log(compile("ji45+-*积极"));
console.log((uncompile(compile("ji45+-*积极"))));
结果:
s%D3%9Di%60XW%u7A19%uE170
ji45+-*积极
这里是结合上面的函数例子,简单些的一个加密函数,先用charCodeAt()
方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数,将传入的值转为字符串,然后用escape
函数进行加密。解密使用的是unescape
。然后再用String.fromCharCode(numX,numX,...,numX)
方法(可接受一个指定的 Unicode 值,然后返回一个字符串。)解密。
下载链接自己的加密解密函数