\u{...} 表示法在 UNICODE 中是什么意思,为什么在 CLDR 项目中只有一些字符这样显示?

What does the \u{...} notation mean in UNICODE and why are only some characters displayed like this in the CLDR project?

this link 中,您会找到每种语言最常用的字符。为什么某些语言的某些字符显示在 \u{...} 符号下? 我觉得括号里的是字符的十六进制编码,但我不明白为什么他们只用一些字符。

似乎所有没有 well-defined stand-alone 外观的代码点(或者不是 意味着 用作 stand-alone字符)用这种表示法表示。

例如U+0A3C出现在“字符”{ਫ\u0A3C}中。 U+0A3C 是一个组合代码点,修改它之前的代码点。

大括号中的字符序列 {}是二合字母(三字母,...)在给定语言中被视为不同的字母(据说在字母表),例如

  • digraph {ch} cs(捷克语);
  • trigraph {dzs} in hu(匈牙利字母表);
  • kkjKako 语言)中更复杂的二合字母示例显示了以下 Python 代码片段:
>>> kkj='[a á à â {a\u0327} b ɓ c d ɗ {ɗy} e é è ê ɛ {ɛ\u0301} {ɛ\u0300} {ɛ\u0302} {ɛ\u0327} f g {gb} {gw} h i í ì î {i\u0327} j k {kp} {kw} l m {mb} n {nd} nj {ny} ŋ {ŋg} {ŋgb} {ŋgw} o ó ò ô ɔ {ɔ\u0301} {ɔ\u0300} {ɔ\u0302} {ɔ\u0327} p r s t u ú ù û {u\u0327} v w y]'
>>> print( kkj)
[a á à â {a̧} b ɓ c d ɗ {ɗy} e é è ê ɛ {ɛ́} {ɛ̀} {ɛ̂} {ɛ̧} f g {gb} {gw} h i í ì î {i̧} j k {kp} {kw} l m {mb} n {nd} nj {ny} ŋ {ŋg} {ŋgb} {ŋgw} o ó ò ô ɔ {ɔ́} {ɔ̀} {ɔ̂} {ɔ̧} p r s t u ú ù û {u̧} v w y]
>>>

例如,{a\u0327} 呈现为 {a̧},即类似 拉丁小写字母 A 与组合 Cedilla 之类的东西,它没有 Unicode 等价物。一个反例:

ņ (U+0146) 带有 Cedilla 的拉丁文小写字母 N 带有分解 004E 0327:

>>> import unicodedata
>>> print( 'ņ', unicodedata.normalize('NFC','{n\u0327}'))
ņ {ņ}

编辑:

显示为 unicode 文字的字符\uxxxx = 具有 16 位十六进制值的字符 xxxx无法渲染 个(或至少 难以呈现 )。下面的 Python 脚本展示了其中的一些 (Bidi_Class Values L-Left_To_Right, R-Right_To_Left,NSM-Nonspacing_Mark,BN-Boundary_Neutral ):

# -*- coding: utf-8 -*-

import unicodedata
pa = 'ੱੰ਼੍ੁੂੇੈੋੌ'
pa = '\u0327 \u0A71 \u0A70 \u0A3C ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੴ ੳ ਉ ਊ ਓ ਅ ਆ ਐ ਔ ੲ ਇ ਈ ਏ ਸ {ਸ\u0A3C} ਹ ਕ ਖ {ਖ\u0A3C} ਗ {ਗ\u0A3C} ਘ ਙ ਚ ਛ ਜ {ਜ\u0A3C} ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ {ਫ\u0A3C} ਬ ਭ ਮ ਯ ਰ ਲ ਵ ੜ \u0A4D ਾ ਿ ੀ \u0A41 \u0A42 \u0A47 \u0A48 \u0A4B \u0A4C'
pa = '\u0300 \u0301 \u0302 \u1DC6 \u1DC7 \u0A71 \u0A70 \u0A3C \u0A4D \u0A41 \u0A42 \u0A47 \u0A48 \u0A4B \u0A4C \u05B7 \u05B8 \u05BF \u200C \u200D \u200E \u200F \u064B \u064C \u064E \u064F \u0650'
# above examples from ·kkj· ·bas· ·pa· ·yi· ·kn· ·ur· ·mzn·
print( pa )
for chr in pa:
  if chr != ' ':
    if chr == '{' or chr == '}':
      print( chr )
    else: 
      print( '\u%04x' % ord(chr), chr,
        unicodedata.category(chr),
        unicodedata.bidirectional(chr) + '\t',
        str( unicodedata.combining(chr)) + '\t',
        unicodedata.name(chr, '?') )

结果: .\SO659122.py

̀ ́ ̂ ᷆ ᷇ ੱ ੰ ਼ ੍ ੁ ੂ ੇ ੈ ੋ ੌ ַ ָ ֿ ‌ ‍ ‎ ‏ ً ٌ َ ُ ِ
\u0300 ̀ Mn NSM  230     COMBINING GRAVE ACCENT
\u0301 ́ Mn NSM  230     COMBINING ACUTE ACCENT
\u0302 ̂ Mn NSM  230     COMBINING CIRCUMFLEX ACCENT
\u1dc6 ᷆ Mn NSM  230     COMBINING MACRON-GRAVE
\u1dc7 ᷇ Mn NSM  230     COMBINING ACUTE-MACRON
\u0a71 ੱ Mn NSM  0       GURMUKHI ADDAK
\u0a70 ੰ Mn NSM  0       GURMUKHI TIPPI
\u0a3c ਼ Mn NSM  7       GURMUKHI SIGN NUKTA
\u0a4d ੍ Mn NSM  9       GURMUKHI SIGN VIRAMA
\u0a41 ੁ Mn NSM  0       GURMUKHI VOWEL SIGN U
\u0a42 ੂ Mn NSM  0       GURMUKHI VOWEL SIGN UU
\u0a47 ੇ Mn NSM  0       GURMUKHI VOWEL SIGN EE
\u0a48 ੈ Mn NSM  0       GURMUKHI VOWEL SIGN AI
\u0a4b ੋ Mn NSM  0       GURMUKHI VOWEL SIGN OO
\u0a4c ੌ Mn NSM  0       GURMUKHI VOWEL SIGN AU
\u05b7 ַ Mn NSM  17      HEBREW POINT PATAH
\u05b8 ָ Mn NSM  18      HEBREW POINT QAMATS
\u05bf ֿ Mn NSM  23      HEBREW POINT RAFE
\u200c ‌ Cf BN   0       ZERO WIDTH NON-JOINER
\u200d ‍ Cf BN   0       ZERO WIDTH JOINER
\u200e ‎ Cf L    0       LEFT-TO-RIGHT MARK
\u200f ‏ Cf R    0       RIGHT-TO-LEFT MARK
\u064b ً Mn NSM  27      ARABIC FATHATAN
\u064c ٌ Mn NSM  28      ARABIC DAMMATAN
\u064e َ Mn NSM  30      ARABIC FATHA
\u064f ُ Mn NSM  31      ARABIC DAMMA
\u0650 ِ Mn NSM  32      ARABIC KASRA