gpt4 book ai didi

javascript - 将字符串编码为 HEX

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:21 35 4
gpt4 key购买 nike

我有将字符串转换为十六进制的函数:

function encode(str){
str = encodeURIComponent(str).split('%').join('');
return str.toLowerCase();
}

例子:

守护村子

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("");

空字符串上的拆分 生成一个数组,每个元素中包含一个字符(或者更确切地说,一个UTF-16 代码点)。然后我们可以将每个映射到字符代码的十六进制字符串。

然后解码:

hex.split(/(\w\w)/g)
.filter(p => !!p)
.map(c => String.fromCharCode(parseInt(c, 16)))
.join("")

这次传递给 split 的正则表达式捕获两个字符的组,但是这种形式的 split 将用空字符串散布它们(捕获组“之间”的东西,这没什么!)。所以 filter 用于删除空字符串。然后 map 解码每个字符。

关于javascript - 将字符串编码为 HEX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637146/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com