如何获取 Javascript 中字符的 Unicode 代码点?

How to get the Unicode code point for a character in Javascript?

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

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

一些可能的字符是:

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

有没有办法从\uHHHH 样式的字符中获取代码? (HHHH 为字符的十六进制代码)

我尝试了 charCodeAt 但是这个 returns 十进制代码。

他们使用 codePointAt examples 将我需要的代码转换为十进制代码,因此我需要将其反转。

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

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

中找到更多详细信息

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

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