我将十六进制转换为字符串。我有十六进制:"0xe4b883e5bda9e7a59ee4bb99e9b1bc"并使用以下代码:
hex_to_ascii(str1){
var hex = str1.toString().substring(2, str1.length);
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
return str;
}
正确的回答必须是"七彩神仙鱼",但我的回答是"ä ̧å1/2©ç¥ä»é±1/4"。我的代码有什么问题。请帮助我,谢谢。
十六进制字符串表示使用 UTF-8 编码编码为字节序列的中文文本。
如果从十六进制字符串中删除前导"0x"并在每两个字符之前插入一个"%"字符,则会得到如下所示的字符串:
%e4%b8%83%e5%bd%a9%e7%a5%9e%e4%bb%99%e9%b1%bc
这就是它在 URI 中的样子,您可以使用 decodeURIComponent
从 UTF-8 解码回来,例如:
"use strict";
var hex = "0xe4b883e5bda9e7a59ee4bb99e9b1bc";
hex = hex.substr(2);
hex = hex.replace( /../g , hex2=>('%'+hex2));
var string = decodeURIComponent(hex);
console.log(string);