【问题标题】:How to reverse String.fromCharCode?如何反转 String.fromCharCode?
【发布时间】:2011-01-05 12:12:58
【问题描述】:

String.fromCharCode(72) 给出 H。如何从 char H 中获取数字 72?

【问题讨论】:

  • 问题中的代码是我来这里的目的,而不是答案。谢谢!

标签: javascript char reverse


【解决方案1】:
'H'.charCodeAt(0)

【讨论】:

  • 您好,感谢您的解决方案。它只适用于英文单词吗?当我试图找到泰米尔语单词的字符代码时,它无法正常工作。如果我使用 String.fromCharCode(2974);它返回字符'ஞ',同样的方式,如果我使用'ஞ'.charCodeAt(0) 得到38,那是'&',为什么会这样?
  • @shanish:如果你写String.fromCharCode(2974).charCodeAt(0),你会得到什么? (它对我有用。)也许你的编辑器和/或源文件不是 Unicode 友好的。
【解决方案2】:

使用 charCodeAt:

var str = 'H';
var charcode = str.charCodeAt(0);

【讨论】:

    【解决方案3】:

    @Silvio 的答案仅适用于高达 0xFFFF 的代码点(这最终是 String.fromCharCode 可以输出的最大值)。你不能总是假设一个字符的长度是一:

    '?'.length
    -> 2
    

    以下是可行的方法:

    var utf16ToDig = function(s) {
        var length = s.length;
        var index = -1;
        var result = "";
        var hex;
        while (++index < length) {
            hex = s.charCodeAt(index).toString(16).toUpperCase();
            result += ('0000' + hex).slice(-4);
        }
        return parseInt(result, 16);
    }
    

    使用它:

    utf16ToDig('?').toString(16)
    -> "d800df30"
    

    (灵感来自https://mothereff.in/utf-8

    【讨论】:

      【解决方案4】:

      您可以像这样定义自己的全局函数:

      function CHR(ord)
      {
          return String.fromCharCode(ord);
      }
      
      function ORD(chr)
      {
          return chr.charCodeAt(0);
      }
      

      然后像这样使用它们:

      var mySTR = CHR(72);
      

      var myNUM = ORD('H');
      

      (如果您想在代码中多次使用它们,和/或多次使用它们。)

      【讨论】:

      • 请不要不要再使用我的建议。我强烈建议使用 object 来包装你的函数,而不是全局定义它们。
      【解决方案5】:

      String.fromCharCode 接受多个参数,因此这是有效的:

      const binaryArray = [10, 24] // ...
      str = String.fromCharCode(...binaryArray)
      

      如果您正在寻找与之相反的(就像我一样),这可能会派上用场:

      const binaryArray = str
        .split('')
        .reduce((acc, next) =>
          [...acc, next.charCodeAt(0)],
          []
        )
      

      【讨论】:

        【解决方案6】:

        如果您必须考虑编码,请注意String 对象中的charCodeAt 方法将默认为utf16 编码。您可以使用string_decoder 对象和Node.js Buffer 对象的编码参数来应用特定的编码。

        charCodeAt 方法仅提供 ascii/utf-16 编码,即使使用 utf-8 编码的String 对象:

        str=new String(new Buffer([195,169]))
        // -> [String: 'é']
        str.charCodeAt(0)
        // -> 233
        

        使用fromCharCode 构建字符串不会像预期的那样正确UTF-16

        myStr=String.fromCharCode(50089, 65, 233)
        // -> '쎩Aé'
        Buffer.from(myStr, 'utf-8')
        // -> <Buffer ec 8e a9 41 c3 a9>
        Buffer.from(myStr, 'ascii')
        // -> <Buffer a9 41 e9>
        myStr.charCodeAt(0)
        // -> 50089
        myStr.charCodeAt(2)
        // -> 233
        

        这是一个编码和解码 UTF8 字节和 ASCII 字节的简单示例:

        var dec=new string_decoder.StringDecoder('utf-8');
        dec.write(Buffer.from([65,67,195,169,98]));
        // -> 'ACéb'
        var theBytes=new Buffer('aéé','utf-8'); 
        // -> <Buffer 61 c3 a9 c3 a9>
        
        var dec=new string_decoder.StringDecoder('ascii')
        dec.write(Buffer.from([65,67,195,169,98]))
        // -> 'ACC)b'
        var theBytes=new Buffer('aéé','ascii')
        // -> <Buffer 61 e9 e9>
        

        StringDecoder.write 方法将从提供的字节缓冲区返回一个String 对象。

        Buffer 对象的编码参数为您提供了一种从提供的字符串中获取带有编码字节的Buffer 对象提要的方法。

        所以要获取 char 'H' 的 ASCII 编码:

        new Buffer('H','ascii');
        // -> <Buffer 48>
        new Buffer('H','ascii')[0];
        // -> 72
        

        这样,你也可以像这样处理多字节编码的字符:

        new Buffer('é','ascii');
        // -> <Buffer e9>
        arr=new Buffer('é','ascii');
        // -> <Buffer e9>
        code=arr.readUIntBE(0,arr.length);
        // -> 233
        code.toString(16);
        // -> 'e9'
        
        new Buffer('é','utf-8');
        // -> <Buffer c3 a9>
        arr=new Buffer('é','utf-8');
        // -> <Buffer c3 a9>
        code=arr.readUIntBE(0,arr.length);
        // -> 50089
        code.toString(16)
        // -> 'c3a9'
        

        【讨论】:

          猜你喜欢
          • 2023-03-10
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 2023-04-05
          • 2023-03-09
          • 2021-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多