Зарезервированные коды символов в Unicode

Почему Unicode имеет несколько зарезервированных кодов символов?
Смотрите Unicode для двух языков - каннада и тамильский. Оба языка очень старые, и я думаю, что нет шансов получить новые символы для этих языков.
РЕДАКТИРОВАТЬ: Тогда почему они тратят некоторые коды символов, делая его зарезервированные коды символов?
Почему они не размещают зарезервированные коды символов в конце каждого языкового набора символов?

1 ответ

Решение

Это связано с тем, как консорциум Unicode распределяет свои выделенные блоки, сценарии и кодовые точки. Например, в Block=Tamil начало начинается следующим образом:

$ unichars '\p{Block=Tamil}' | head -20
U+00B82 ‭ ◌ஂ  GC=Mn SC=Tamil        TAMIL SIGN ANUSVARA
U+00B83 ‭ ஃ  GC=Lo SC=Tamil        TAMIL SIGN VISARGA
U+00B85 ‭ அ  GC=Lo SC=Tamil        TAMIL LETTER A
U+00B86 ‭ ஆ  GC=Lo SC=Tamil        TAMIL LETTER AA
U+00B87 ‭ இ  GC=Lo SC=Tamil        TAMIL LETTER I
U+00B88 ‭ ஈ  GC=Lo SC=Tamil        TAMIL LETTER II
U+00B89 ‭ உ  GC=Lo SC=Tamil        TAMIL LETTER U
U+00B8A ‭ ஊ  GC=Lo SC=Tamil        TAMIL LETTER UU
U+00B8E ‭ எ  GC=Lo SC=Tamil        TAMIL LETTER E
U+00B8F ‭ ஏ  GC=Lo SC=Tamil        TAMIL LETTER EE
U+00B90 ‭ ஐ  GC=Lo SC=Tamil        TAMIL LETTER AI
U+00B92 ‭ ஒ  GC=Lo SC=Tamil        TAMIL LETTER O
U+00B93 ‭ ஓ  GC=Lo SC=Tamil        TAMIL LETTER OO
U+00B94 ‭ ஔ  GC=Lo SC=Tamil        TAMIL LETTER AU
U+00B95 ‭ க  GC=Lo SC=Tamil        TAMIL LETTER KA
U+00B99 ‭ ங  GC=Lo SC=Tamil        TAMIL LETTER NGA
U+00B9A ‭ ச  GC=Lo SC=Tamil        TAMIL LETTER CA
U+00B9C ‭ ஜ  GC=Lo SC=Tamil        TAMIL LETTER JA
U+00B9E ‭ ஞ  GC=Lo SC=Tamil        TAMIL LETTER NYA
U+00B9F ‭ ட  GC=Lo SC=Tamil        TAMIL LETTER TTA

Они имеют тенденцию резервировать смежные строки из 4, 8 или 16 кодовых точек для одного и того же "вида" символа. Да, есть пробелы, но это похоже на то, как в файловой системе, когда вы выделяете сектор (или блок, если у вас нет отдельных секторов в блоке) для одного файла, даже если этот файл не использует все в своем (последний) сектор, вы не отдаете эти неиспользованные байты в какой-то другой процесс. Вещи имеют тенденцию быть дополненными, чтобы заблокировать границы так или иначе.

Мы не рискуем исчерпать коды.

Здесь начало выделенной области начинается со "Знаков", как показано первыми назначенными кодовыми точками в этом блоке. Разрыв может представлять собой переход от одного типа персонажа к другому. Если вы проверите первые пять кодовых точек в блоке на предмет их свойств, вы увидите, что эти неназначенные кодовые точки все еще имеют свойство правильного блока:

$ uniprops -a U+00B80 U+00B81 U+00B82 U+00B83 U+00B84 U+00B85
U+0B80 ‹U+0B80› \N{U+0B80}
    \pC \p{Cn}
    All Any InTamil C Other Cn Unassigned Zzzz Unknown
    Age=Unassigned Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered
       CCC=NR Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=Other GCB=XX
       Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=Unknown LB=XX Line_Break=XX Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=Unassigned IN=Unassigned Script=Unknown SC=Zzzz Script=Zzzz Sentence_Break=Other SB=XX
       Sentence_Break=XX Word_Break=Other WB=XX Word_Break=XX
U+0B81 ‹U+0B81› \N{U+0B81}
    \pC \p{Cn}
    All Any InTamil C Other Cn Unassigned Zzzz Unknown
    Age=Unassigned Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered
       CCC=NR Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=Other GCB=XX
       Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=Unknown LB=XX Line_Break=XX Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=Unassigned IN=Unassigned Script=Unknown SC=Zzzz Script=Zzzz Sentence_Break=Other SB=XX
       Sentence_Break=XX Word_Break=Other WB=XX Word_Break=XX
U+0B82 ‹◌ஂ› \N{TAMIL SIGN ANUSVARA}
    \w \pM \p{Mn}
    All Any Alnum Alpha Alphabetic Assigned InTamil Tamil Is_Tamil Case_Ignorable CI M Mn Gr_Ext Grapheme_Extend Graph GrExt ID_Continue IDC
       Mark Nonspacing_Mark Print Taml Word XID_Continue XIDC X_POSIX_Alnum X_POSIX_Alpha X_POSIX_Graph X_POSIX_Print X_POSIX_Word
    Age=1.1 Bidi_Class=Nonspacing_Mark BC=NSM Bidi_Class=NSM Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered
       CCC=NR Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=EX
       Grapheme_Cluster_Break=Extend GCB=EX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=T Joining_Type=Transparent JT=T Line_Break=CM Line_Break=Combining_Mark LB=CM Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=1.1 IN=1.1 Present_In=2.0 IN=2.0 Present_In=2.1 IN=2.1 Present_In=3.0 IN=3.0 Present_In=3.1 IN=3.1
       Present_In=3.2 IN=3.2 Present_In=4.0 IN=4.0 Present_In=4.1 IN=4.1 Present_In=5.0 IN=5.0 Present_In=5.1 IN=5.1 Present_In=5.2 IN=5.2
       Present_In=6.0 IN=6.0 Script=Tamil SC=Taml Script=Taml Sentence_Break=EX Sentence_Break=Extend SB=EX Word_Break=Extend WB=Extend
U+0B83 ‹ஃ› \N{TAMIL SIGN VISARGA}
    \w \pL \p{L_} \p{Lo}
    All Any Alnum Alpha Alphabetic Assigned InTamil Tamil Is_Tamil L Lo Gr_Base Grapheme_Base Graph GrBase ID_Continue IDC ID_Start IDS Letter
       L_ Other_Letter Print Taml Word XID_Continue XIDC XID_Start XIDS X_POSIX_Alnum X_POSIX_Alpha X_POSIX_Graph X_POSIX_Print X_POSIX_Word
    Age=1.1 Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered CCC=NR
       Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=Other GCB=XX
       Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=AL Line_Break=Alphabetic LB=AL Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=1.1 IN=1.1 Present_In=2.0 IN=2.0 Present_In=2.1 IN=2.1 Present_In=3.0 IN=3.0 Present_In=3.1 IN=3.1
       Present_In=3.2 IN=3.2 Present_In=4.0 IN=4.0 Present_In=4.1 IN=4.1 Present_In=5.0 IN=5.0 Present_In=5.1 IN=5.1 Present_In=5.2 IN=5.2
       Present_In=6.0 IN=6.0 Script=Tamil SC=Taml Script=Taml Sentence_Break=LE Sentence_Break=OLetter SB=LE Word_Break=ALetter WB=LE
       Word_Break=LE
U+0B84 ‹U+0B84› \N{U+0B84}
    \pC \p{Cn}
    All Any InTamil C Other Cn Unassigned Zzzz Unknown
    Age=Unassigned Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered
       CCC=NR Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=Other GCB=XX
       Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=Unknown LB=XX Line_Break=XX Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=Unassigned IN=Unassigned Script=Unknown SC=Zzzz Script=Zzzz Sentence_Break=Other SB=XX
       Sentence_Break=XX Word_Break=Other WB=XX Word_Break=XX
U+0B85 ‹அ› \N{TAMIL LETTER A}
    \w \pL \p{L_} \p{Lo}
    All Any Alnum Alpha Alphabetic Assigned InTamil Tamil Is_Tamil L Lo Gr_Base Grapheme_Base Graph GrBase ID_Continue IDC ID_Start IDS Letter
       L_ Other_Letter Print Taml Word XID_Continue XIDC XID_Start XIDS X_POSIX_Alnum X_POSIX_Alpha X_POSIX_Graph X_POSIX_Print X_POSIX_Word
    Age=1.1 Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Tamil Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered CCC=NR
       Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=Neutral Grapheme_Cluster_Break=Other GCB=XX
       Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group
       JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=AL Line_Break=Alphabetic LB=AL Numeric_Type=None NT=None
       Numeric_Value=NaN NV=NaN Present_In=1.1 IN=1.1 Present_In=2.0 IN=2.0 Present_In=2.1 IN=2.1 Present_In=3.0 IN=3.0 Present_In=3.1 IN=3.1
       Present_In=3.2 IN=3.2 Present_In=4.0 IN=4.0 Present_In=4.1 IN=4.1 Present_In=5.0 IN=5.0 Present_In=5.1 IN=5.1 Present_In=5.2 IN=5.2
       Present_In=6.0 IN=6.0 Script=Tamil SC=Taml Script=Taml Sentence_Break=LE Sentence_Break=OLetter SB=LE Word_Break=ALetter WB=LE
       Word_Break=LE

Если вы посмотрите на другие выделенные блоки, вы увидите то же самое. Нет смысла нарезать блоки на несвязанные вещи.

Как я уже сказал, это не значит, что им не хватит места, поэтому я не знаю, в чем тут проблема.

Кстати, вы можете получить инструменты Unicode для исследования и обработки, такие как unichars, uniprops, uninames, из моего набора инструментов командной строки Unicode, либо оттуда по отдельности, либо весь комплект, доступный через CPAN Unicode::Tussle Люкс

Другие вопросы по тегам