我有将字符串转换为十六进制的函数:
function encode(str){
str = encodeURIComponent(str).split('%').join('');
return str.toLowerCase();
}
example:
守护村子
alert(encode('守护村子'));
输出将是:
e5ae88e68aa4e69d91e5ad90
它适用于汉字。但是当我用英文字母做的时候
alert(encode('Hello World'))
;
它输出:
hello20world
我尝试过将字符串转换为十六进制:
function String2Hex(tmp) {
var str = '';
for(var i = 0; i < tmp.length; i++) {
str += tmp[i].charCodeAt(0).toString(16);
}
return str;
}
然后对上面的中文字符进行了尝试,但它输出的是 UTF-8 HEX:
5b8862a467515b50
不是 ANSI 十六进制:
e5ae88e68aa4e69d91e5ad90
我也搜索过将 UFT8 转换为 ANSI 但没有成功。
有人可以帮助我吗?谢谢!
作为功能风格的独立解决方案,您可以使用以下方式进行编码:
plain.split("")
.map(c => c.charCodeAt(0).toString(16).padStart(2, "0"))
.join("");
The split
对空字符串生成一个数组,每个元素中包含一个字符(或者更确切地说,一个 UTF-16 代码点)。然后我们可以将每个字符映射到字符代码的十六进制字符串。
然后解码:
hex.split(/(\w\w)/g)
.filter(p => !!p)
.map(c => String.fromCharCode(parseInt(c, 16)))
.join("")
这次正则表达式传递给split
捕获两个字符组成的组,但是这种形式split
将用空字符串散布它们(捕获组“之间”的东西,什么都不是!)。所以filter
用于删除空字符串。然后map
解码每个字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)