如何查找复合 unicode 字符的 UTF-8 引用
How to find UTF-8 reference of a composite unicode character
在工作中,我遇到了这个问题,我需要找到 复合 unicode 字符 的 UTF-8 引用。
有问题的字符是一个 "n",上面有一个“^”:n̂。这在 unicode 中由字符 "n" (U+006E) 后跟抑扬音符号 (U+0302) 表示。
我要查找的是 UTF-8 中此字符的单一引用。
我一直在四处寻找,但我似乎找不到这个问题的答案。我觉得自己很傻,因为找到这么简单的东西似乎并不难。
Edit :所以我认为 "n" 和 "^" 的组合可以映射到单个 UTF-8 代码点(我希望我是使用正确的术语)。但是,您向我解释说情况并非如此。
谢谢大家的帮助。
Loïc.
如果您希望字符串尽可能地组合,那么您希望它在 NFC 中(标准化形式组合,参见 Unicode equivalence). You can do this in Python using this example:
#!/usr/bin/python3
import unicodedata
for s in ['Jalapen\u0303o', 'n̂']:
print(s)
print(ascii(s))
print('NFC:', ascii(unicodedata.normalize('NFC', s)))
print('NFD:', ascii(unicodedata.normalize('NFD', s)))
print('')
这会给你:
Jalapeño
'Jalapen\u0303o'
NFC: 'Jalape\xf1o'
NFD: 'Jalapen\u0303o'
n̂
'n\u0302'
NFC: 'n\u0302'
NFD: 'n\u0302'
如您所见,'ñ' 既有组合形式也有分解形式,而 'n̂' 则没有。它的唯一形式被分解为两个单独的字符。
UTF-8 是一种 字节编码,用于一系列单独的 Unicode 代码点。没有为 n̂
定义单个 Unicode 代码点,即使在 NFC 或 NFKC 格式中规范化 Unicode 字符串时也是如此。正如您所注意到的,n̂
由代码点 U+006E LATIN SMALL LETTER N
和后面的代码点 U+0302 COMBINING CIRCUMFLEX ACCENT
组成。在UTF-8中,U+006E
编码为字节0x6E
,U+0302
编码为字节0xCC 0x82
.
在工作中,我遇到了这个问题,我需要找到 复合 unicode 字符 的 UTF-8 引用。
有问题的字符是一个 "n",上面有一个“^”:n̂。这在 unicode 中由字符 "n" (U+006E) 后跟抑扬音符号 (U+0302) 表示。
我要查找的是 UTF-8 中此字符的单一引用。
我一直在四处寻找,但我似乎找不到这个问题的答案。我觉得自己很傻,因为找到这么简单的东西似乎并不难。
Edit :所以我认为 "n" 和 "^" 的组合可以映射到单个 UTF-8 代码点(我希望我是使用正确的术语)。但是,您向我解释说情况并非如此。 谢谢大家的帮助。
Loïc.
如果您希望字符串尽可能地组合,那么您希望它在 NFC 中(标准化形式组合,参见 Unicode equivalence). You can do this in Python using this example:
#!/usr/bin/python3
import unicodedata
for s in ['Jalapen\u0303o', 'n̂']:
print(s)
print(ascii(s))
print('NFC:', ascii(unicodedata.normalize('NFC', s)))
print('NFD:', ascii(unicodedata.normalize('NFD', s)))
print('')
这会给你:
Jalapeño
'Jalapen\u0303o'
NFC: 'Jalape\xf1o'
NFD: 'Jalapen\u0303o'
n̂
'n\u0302'
NFC: 'n\u0302'
NFD: 'n\u0302'
如您所见,'ñ' 既有组合形式也有分解形式,而 'n̂' 则没有。它的唯一形式被分解为两个单独的字符。
UTF-8 是一种 字节编码,用于一系列单独的 Unicode 代码点。没有为 n̂
定义单个 Unicode 代码点,即使在 NFC 或 NFKC 格式中规范化 Unicode 字符串时也是如此。正如您所注意到的,n̂
由代码点 U+006E LATIN SMALL LETTER N
和后面的代码点 U+0302 COMBINING CIRCUMFLEX ACCENT
组成。在UTF-8中,U+006E
编码为字节0x6E
,U+0302
编码为字节0xCC 0x82
.