一尘不染

Javascript:将Unicode字符串转换为十六进制

javascript

我正在尝试将Unicode字符串转换为javascript中的十六进制表示形式。

这就是我所拥有的:

function convertFromHex(hex) {
    var hex = hex.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

function convertToHex(str) {
    var hex = '';
    for(var i=0;i<str.length;i++) {
        hex += ''+str.charCodeAt(i).toString(16);
    }
    return hex;
}

但是如果对像中文这样的unicode字符失败的话;

输入:汉字

输出:ªo“ [W

有任何想法吗?可以用javascript完成吗?


阅读 341

收藏
2020-05-01

共1个答案

一尘不染

请记住,JavaScript代码单元为16位宽。因此,十六进制字符串形式将是每个代码单位4位数字。

用法:

var str = "\u6f22\u5b57"; // "\u6f22\u5b57" === "漢字"
alert(str.hexEncode().hexDecode());

字符串到十六进制形式:

String.prototype.hexEncode = function(){
    var hex, i;

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

    return result
}

再次回来:

String.prototype.hexDecode = function(){
    var j;
    var hexes = this.match(/.{1,4}/g) || [];
    var back = "";
    for(j = 0; j<hexes.length; j++) {
        back += String.fromCharCode(parseInt(hexes[j], 16));
    }

    return back;
}
2020-05-01