在我的客户端/服务器应用程序中,我从服务器获取十六进制格式的字符串,需要将其转换为UTF8。然后,在进行一些操作后,我需要将字符串重新编码,从UTF8转换为十六进制并将其返回给服务器。
我已经构建了这个函数来解析十六进制字符串到UTF8。但是当我尝试反转此算法时,我得到完全不同的结果。
这是我的测试:
function hexToUtf8(s)
{
return decodeURIComponent(
s.replace(/\s+/g, '') // remove spaces
.replace(/[0-9a-f]{2}/g, '%$&') // add '%' before each 2 characters
);
}
function utf8ToHex(s)
{
return encodeURIComponent(s).replace(/%/g, ""); // remove all '%' characters
}
var hex = "52656c6179204f4e214f706572617465642062792030353232";
var utf8 = hexToUtf8(hex); // result: "Relay ON!Operated by 0522" (correct value)
var hex2 = utf8ToHex(utf8); // result: "Relay20ON!Operated20by200522" (some junk)
console.log("Hex: " + hex);
console.log("UTF8: " + utf8);
console.log("Hex2: " + hex2);
console.log("Is conversion OK: " + (hex == hex2)); // false
encodeURIComponent
不是十六进制吗,你确定你想要的是十六进制吗? - KeithencodeURIComponent
。 - Gil Epshtain