在javascript中将十六进制解码为带有中文字符的字符串



我将十六进制转换为字符串。我有十六进制:"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);

最新更新