如何获取 Javascript 中字符的 Unicode 代码点?
Posted
技术标签:
【中文标题】如何获取 Javascript 中字符的 Unicode 代码点?【英文标题】:How to get the Unicode code point for a character in Javascript? 【发布时间】:2018-06-09 02:28:53 【问题描述】:我正在使用条形码扫描仪读取我网站上的条形码(该网站是用 OpenUI5 制作的)。
扫描仪就像一个键盘,可以输入它所读取的字符。在打字的结尾和开头,它使用一个特殊字符。这些字符对于每种类型的扫描仪都是不同的。
一些可能的字符是:
█ ▄ – —在我的代码中,我使用if (oModelScanner.oData.scanning && oEvent.key == "\u2584")
来检查来自扫描仪的输入是否为▄。
有什么方法可以从该字符中获取 \uHHHH 样式的代码? (其中 HHHH 是字符的十六进制代码)
我尝试了charCodeAt,但这会返回十进制代码。
使用codePointAt examples,他们将我需要的代码变成十进制代码,所以我需要反过来。
【问题讨论】:
【参考方案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);
["\u1f926", "\u1f3fc", "\u200d", "\u2642", "\ufe0f"]
如果您对??♂️的组件和长度有疑问,请查看this article。
【讨论】:
以上是关于如何获取 Javascript 中字符的 Unicode 代码点?的主要内容,如果未能解决你的问题,请参考以下文章
javascript 如何在JavaScript中获取查询字符串值?
如何从字符串中获取 4 个 javascript 中邮政编码的序号?
如何获取 Javascript 中字符的 Unicode 代码点?