Javascript:Unicode字符串到十六进制

问题描述 投票:47回答:4

我正在尝试将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角色;

Input: 汉字

输出:ªo“[W

有任何想法吗?这可以在javascript中完成吗?

javascript jquery unicode utf-8 hex
4个回答
81
投票

请记住,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;
}

9
投票

这取决于您使用的编码。如果要将utf-8编码的十六进制转换为字符串,请使用:

function fromHex(hex,str){
  try{
    str = decodeURIComponent(hex.replace(/(..)/g,'%$1'))
  }
  catch(e){
    str = hex
    console.log('invalid hex input: ' + hex)
  }
  return str
}

对于其他方向使用此:

function toHex(str,hex){
  try{
    hex = unescape(encodeURIComponent(str))
    .split('').map(function(v){
      return v.charCodeAt(0).toString(16)
    }).join('')
  }
  catch(e){
    hex = str
    console.log('invalid text input: ' + str)
  }
  return hex
}

8
投票

以下是McDowell算法的一个调整,它没有填充结果:

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

8
投票

你怎么从JavaScript中的"\u6f22\u5b57"获得漢字

这些是JavaScript Unicode escape sequences e.g. \u12AB。要转换它们,您可以迭代字符串中的每个代码单元,在其上调用.toString(16),然后从那里开始。

但是,尽可能在输出中使用hexadecimal escape sequences e.g. \xAA更有效。

另请注意,Ab-等ASCII符号可能不需要转义。

我写了一个小的JavaScript库,为你完成所有这些,称为jsesc。它有很多控制输出的选项。

以下是该工具的在线演示:http://mothereff.in/js-escapes#1%E6%BC%A2%E5%AD%97


您的问题被标记为utf-8。阅读其余的问题,UTF-8编码/解码似乎不是你想要的,但万一你需要它:use utf8.jsonline demo)。

© www.soinside.com 2019 - 2024. All rights reserved.