Javascript - 将字符串编码为HEX

时间:2016-04-15 02:12:35

标签: javascript utf-8 hex

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

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 Hex:

e5ae88e68aa4e69d91e5ad90

我也搜索过将UFT8转换为ANSI但没有运气。 有人可以帮帮我吗?谢谢!

5 个答案:

答案 0 :(得分:8)

const myString = "This is my string to be encoded/decoded";
const encoded = new Buffer(myString).toString('hex'); // encoded === 54686973206973206d7920737472696e6720746f20626520656e636f6465642f6465636f646564
const decoded = new Buffer(encoded, 'hex').toString(); // decoded === "This is my string to be encoded/decoded"

答案 1 :(得分:4)

作为功能齐全的独立解决方案,您可以使用以下代码进行编码:

plain.split("")
     .map(c => c.charCodeAt(0).toString(16).padStart(2, "0"))
     .join("");

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

然后解码:

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

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

答案 2 :(得分:1)

我已通过下载utf8.js

解决了这个问题

https://github.com/mathiasbynens/utf8.js

然后使用上面的String2Hex函数:

alert(String2Hex(utf8.encode('守护村子')));

给了我想要的输出:

e5ae88e68aa4e69d91e5ad90

答案 3 :(得分:0)

这应该有效

var str="some random string";
var result = "";
    for (i=0; i<str.length; i++) {
        hex = str.charCodeAt(i).toString(16);
        result += ("000"+hex).slice(-4);
    }

答案 4 :(得分:0)

如果您想正确处理UTF8字符串,可以尝试以下操作:

    function utf8ToHex(str) {
      return Array.from(str).map(c => 
        c.charCodeAt(0) < 128 ? c.charCodeAt(0).toString(16) : 
        encodeURIComponent(c).replace(/\%/g,'').toLowerCase()
      ).join('');
    },
    function hexToUtf8: function(hex) {
      return decodeURIComponent('%' + hex.match(/.{1,2}/g).join('%'));
    }

演示:https://jsfiddle.net/lyquix/k2tjbrvq/