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

Jun*_*ook 3 javascript unicode character-encoding non-ascii-characters

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

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

一些可能的角色是:

  • -
  • -

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

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

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

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

San*_*Lee 8

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

\n

\r\n
\r\n
const facepalmWithExtraAttributes = "\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f"; // sex, skin, etc\nconst codePoints = Array.from(facepalmWithExtraAttributes)\n  .map((character) => character.codePointAt(0).toString(16))\n  .map((hex) => "\\\\u{" + hex + "}");\nconsole.log({\n  facepalmWithExtraAttributes,\n  codePoints\n}); // {   "facepalmWithExtraAttributes": "\\u200d\xe2\x99\x82\xef\xb8\x8f",   "codePoints": [     "\\\\u{1f926}",     "\\\\u{1f3fc}",      "\\\\u{200d}",    "\\\\u{2642}",    "\\\\u{fe0f}"  ] }
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

如果您想了解 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 的组成部分和长度,请查看这篇文章

\n


lau*_*ent 7

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

var hex = "?".codePointAt(0).toString(16);
var result = "\\u" + "0000".substring(0, 4 - hex.length) + hex;
Run Code Online (Sandbox Code Playgroud)

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

oEvent.key.codePointAt(0) === '?'.codePointAt(0);
Run Code Online (Sandbox Code Playgroud)

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

出于这个原因,我建议使用专门的库.

您可以在Mathias Bynens的相关文章中找到更多详细信息


Nik*_*sov 6

var hex = "\xe2\x96\x84".charCodeAt(0).toString(16);\nvar result = "\\\\u" + "0000".substring(0, 4 - hex.length) + hex;\n
Run Code Online (Sandbox Code Playgroud)\n