JavaScript中的Unicode组成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的Unicode组成相关的知识,希望对你有一定的参考价值。

我正在寻找一种方法,可以将连字显示给用户时作为一个单位进行计数,例如https://www.compart.com/en/unicode/U+FEFB

键入此字符时(阿拉伯键盘上为G,则以分解形式,即U+0644 U+0627插入)。

我可以分解U+FEFB

escape(String.fromCodePoint(0xFEFB).normalize("NFKD")) // '%u0644%u0627'

是否有将U+0644 U+0627合成为0xFEFB的方法?

为什么这样做有效?

escape(String.fromCodePoint(0x0644, 0x0627).normalize("NFKC"))

[我唯一的想法是遍历我感兴趣的unicode范围,分解并创建地图,但我希望有更好的方法。

答案

鉴于the ES2019 spec要求实现:

让ns为String值,它是将S标准化为https://unicode.org/reports/tr15/中指定的以f命名的标准化形式的结果。

并且考虑到https://www.unicode.org/Public/12.1.0/ucd/NormalizationTest.txt将该字符描述为

FEFB;FEFB;FEFB;0644 0627;0644 0627; # (ﻻ; ﻻ; ﻻ; لا; لا; ) ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM

这是合规的行为。参见

# 1. The following invariants must be true for all conformant implementations
#
#    NFC
#      c2 ==  toNFC(c1) ==  toNFC(c2) ==  toNFC(c3)
#      c4 ==  toNFC(c4) ==  toNFC(c5)
#
#    NFD
#      c3 ==  toNFD(c1) ==  toNFD(c2) ==  toNFD(c3)
#      c5 ==  toNFD(c4) ==  toNFD(c5)
#
#    NFKC
#      c4 == toNFKC(c1) == toNFKC(c2) == toNFKC(c3) == toNFKC(c4) == toNFKC(c5)
#
#    NFKD
#      c5 == toNFKD(c1) == toNFKD(c2) == toNFKD(c3) == toNFKD(c4) == toNFKD(c5)

无规范化将c4c5格式转换回c1c2c3

因此,根据我的unicode-amateur的意见,没有标准化的方法可以将U+0644 U+0627标准化回U+FEFB

以上是关于JavaScript中的Unicode组成的主要内容,如果未能解决你的问题,请参考以下文章

48个值得掌握的JavaScript代码片段(上)

JavaScript 代码片段

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)

VSCode自定义代码片段——JS中的面向对象编程

如何将 javascript regexp 中的 Euro € 符号与八进制、十六进制或 unicode 元字符匹配?