javascript 中的 Unicode 组合
Unicode composition in javascript
我正在寻找一种方法,在向用户显示时将连字计为单个单位,例如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 要求实施:
Let ns be the String value that is the result of normalizing S into the normalization form named by f as specified in https://unicode.org/reports/tr15/.
并且鉴于 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)
没有规范化将 c4
或 c5
形式转换回 c1
,或 c2
,或 c3
。
所以我的 unicode 业余爱好者认为没有符合标准的方法将 U+0644 U+0627
规范化回 U+FEFB
。
我正在寻找一种方法,在向用户显示时将连字计为单个单位,例如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 要求实施:
Let ns be the String value that is the result of normalizing S into the normalization form named by f as specified in https://unicode.org/reports/tr15/.
并且鉴于 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)
没有规范化将 c4
或 c5
形式转换回 c1
,或 c2
,或 c3
。
所以我的 unicode 业余爱好者认为没有符合标准的方法将 U+0644 U+0627
规范化回 U+FEFB
。