【问题标题】:How to get the Unicode code point for a character in Javascript?如何获取 Javascript 中字符的 Unicode 代码点?
【发布时间】:2023-03-14 07:40:01
【问题描述】:

我正在使用条形码扫描仪读取我网站上的条形码(该网站是用 OpenUI5 制作的)。

扫描仪就像一个键盘,可以输入它所读取的字符。在打字的结尾和开头,它使用一个特殊字符。这些字符对于每种类型的扫描仪都是不同的。

一些可能的字符是:

在我的代码中,我使用if (oModelScanner.oData.scanning && oEvent.key == "\u2584") 来检查来自扫描仪的输入是否为▄。

有什么方法可以从该字符中获取 \uHHHH 样式的代码? (其中 HHHH 是字符的十六进制代码)

我尝试了charCodeAt,但这会返回十进制代码。

使用codePointAt examples,他们将我需要的代码变成十进制代码,所以我需要反过来。

【问题讨论】:

    标签: javascript unicode character-encoding non-ascii-characters


    【解决方案1】:

    Javascript 字符串有一个 codePointAt 方法,它为您提供表示 Unicode 点值的整数。如果您希望将整数格式化为四位十六进制数字序列(如 Nikolay Spasov 的响应),则需要使用该数字的基数 16(十六进制)表示。

    var hex = "▄".codePointAt(0).toString(16);
    var result = "\\u" + "0000".substring(0, 4 - hex.length) + hex;
    

    但是,如果您的关键代码点整数与预期的代码点匹配,您可能会更容易直接检查

    oEvent.key.codePointAt(0) === '▄'.codePointAt(0);
    

    请注意,“符号相等”实际上可能更棘手:一些符号是由代理对定义的(您可以将其视为定义为四个十六进制数字序列的两半的组合)。

    因此,我建议使用专门的库。

    您可以在relevant article by Mathias Bynens 中找到更多详细信息

    【讨论】:

    • codePointAt 不返回十进制的代码点。它返回只是数字。无论是十进制还是十六进制,只有稍后在某个地方打印该数字时才会变得相关。
    • 这是正确的:一个数字有一个给定的值,独立于它的一个表示使用的基数。然而,在比较的上下文中,数字的表示也很重要,例如:56 !== 0x56 (86) 但更重要的是 '\u0056'.codePointAt(0) !== 56,这常常令人困惑跨度>
    • 如果你的代码点大于FFFF怎么办?例如,'?'.codePointAt(0).toString(16) 返回'1000a'
    【解决方案2】:
    var hex = "▄".charCodeAt(0).toString(16);
    var result = "\\u" + "0000".substring(0, 4 - hex.length) + hex;
    

    【讨论】:

      【解决方案3】:

      如果你想打印一个字符的多个代码点,例如一个表情符号,你可以这样做:

      const facepalm = "??‍♂️";
      const codePoints = Array.from(facepalm)
        .map((v) => v.codePointAt(0).toString(16))
        .map((hex) => "\\u{" + hex + "}");
      console.log(codePoints);
      
      ["\u{1f926}", "\u{1f3fc}", "\u{200d}", "\u{2642}", "\u{fe0f}"]
      

      如果您对??‍♂️的组件和长度有疑问,请查看this article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 2010-10-15
        相关资源
        最近更新 更多