将十六进制转义字符转换为二进制



我正在寻找一种将JavaScript字符统一转换为二进制的方法。我面临的一个问题是,我不能正确转换unescape函数中使用的字符串

document.write("HI"); ==> HI (case 1)
document.write("x48x49");  ==> HI (case 2)
document.write(unescape("%48%49")); ==> HI (case 3)

案例1:转换"HI"对二进制生成:

0100100001001001

案例2:转换"x48x49"对二进制生成:

0100100001001001

案例3:转换"%48%49"对二进制生成:

001001010011010000111000001001010011010000111001

我明白情况3中发生了什么。它将每个字符转换为二进制,而没有意识到这些字符是以十六进制表示的。如何在不需要任何预处理的情况下使情况3具有与情况1和情况2相同的二进制表示?

decodeURIComponent是合适的函数。已弃用decode功能。下面是一个例子。

如果你把%48%49输入并点击"转换"按钮,它会给你第二种情况。

var test = document.querySelector("#test");
var btn = document.querySelector("#btn");
var result = document.querySelector("#result");
btn.addEventListener("click", function() {
  var value = decodeURIComponent(test.value);
  var resultText = "";
  
  for (i = 0; i < value.length; i++) {
    resultText += value.charCodeAt(i).toString(2);
  }
  
  result.innerText = resultText;
});
<input type="text" id="test">
<button id="btn">Convert</button>
<p id="result"></p>

最新更新