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

时间:2017-12-28 14:24:03

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

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

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

一些可能的角色是:

  • -
  • -

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

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

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

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

3 个答案:

答案 0 :(得分:6)

Javascript字符串有一个方法codePointAt,它为您提供基数为10的给定符号的整数值,如果您希望将整数格式化为四,则需要转换基数为16(十六进制)的整数十六进制数字序列(如Nikolay Spasov的回应)。

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

中找到更多详细信息

答案 1 :(得分:1)

'

答案 2 :(得分:0)

如果要打印字符(例如表情符号)的多个代码点,可以执行以下操作:

const facepalm = '??‍♂️';
const codePoints = Array.from(facepalm)
  .map((v) => v.codePointAt(0).toString(16))
  .map((hex) => "\\u" + "0000".substring(0, 4 - hex.length) + hex);
console.log(codePoints);

["\u1f926", "\u1f3fc", "\u200d", "\u2642", "\ufe0f"]

如果您想知道??‍♂️的组件和长度,请查看this article