Unicode の諸問題

渡邊朱倫
最終改訂 2024 年 9 月 1 日

約物の統合

「Unicode で『統合』されているのは漢字だけ」と言う人がいるが、色々な意味で嘘である。その一つに約物の問題がある。

先ず空白(U+0020)はラテン文字、キリル文字、アラビア文字、ブラーフミー系文字、ハングル等で用いられる。空白の適切な広さは用字系、或いは前後の文字によって異なる(例えばアラビア文字ナスタアリーク体は、見かけ上の空白を殆ど空けない)から、U+0020 の空白に具体的な広さを想定しない方が良い。「半角」と看做すなど、以ての外である。

コンマ(U+002C)や終止符(U+002E)も多くの用字系で「共用」されることを前提に設計されている。ラテン文字とキリル文字でディセンダのバランスなどが異なっても、少なくともコードポイントは共用され、用字系毎にフォントを切り替えつつ適切な約物の字形を指定するには難がある(直前の文字の用字系に揃えるのが適切だろうか?)。

同体のラテン文字と大文字小文字関係

Unicode には字体のほぼ同じ(D に横画を加えた)ラテン文字大文字が三個登録されてあり、字体の異なる三個の小文字に対応している。

大文字 Ð Đ Ɖ
大文字の位置 U+00D0 U+0110 U+0189
小文字 ð đ ɖ
小文字の位置 U+00F0 U+0111 U+0256
使用言語 古英語・アイスランド語など クロアチア語・ベトナム語など エウェ語など

一方、トルコ語・アゼルバイジャン語等では「点の有る大文字の İ」が「点の有る小文字の i」に対応し、「点の無い大文字の I」が「点の無い小文字の ı」に対応する。そして「点の無い大文字の I」が「点の有る小文字の i」に対応する他の大多数の言語の文字と、字体に応じてコードポイントを共有している。

大文字 I I İ
大文字の位置 U+0049 U+0049 U+0130
小文字 i ı i
小文字の位置 U+0069 U+0131 U+0069
使用言語 大多数の言語 トルコ語、アゼルバイジャン語など

即ち、Unicode では「D」関係の文字では大文字小文字の対応が反映されているにも関わらず、「I」関係の文字では反映されていない、という矛盾が存在する。実際、ドメイン名の扱いに於いて問題が起きたという(具体的にどう解決されたかは知らないが)。

若し「字体の相同性」によって新しく符号化文字集合を作るならば、三つの「横画を加えた D」を一つに纏めなければならない。

(以下「文字の位置」は便宜的な表現である)

文字 Ð I İ ð đ ɖ ı i
文字の位置 C01 C11 C12 S01 S02 S03 S11 S12

逆に「大文字と小文字の対応」を慮って符号化文字集合を作るならば、「I」関係の文字は 6 種に峻別せねばならない。

大文字 Ð Đ Ɖ I I İ
大文字の位置 C01 C02 C03 C11 C12 C13
小文字 ð đ ɖ i ı i
小文字の位置 S01 S02 S03 S11 S12 S13

後者の場合、大文字 Cn1n2 が小文字 Sn1n2 に「対応」する。

どちらが優っているかは場合によるが、例えば後者の如く「トルコ語用の点の有る i」が存在することは「f と『点の有る i』の合字化」(トルコ語では混乱する)を防ぐのに有理だとは言える。

数学用アルファベット

少なくとも一昔前のコンピュータの教本には「プレーンテキストは書体の情報が無い文書である」と記述されていたが、その意味では「数学用アルファベット」の登場で Unicode のプレーンテキストは最早プレーンテキストではなくなってしまったと言える。

しかもこの「数学用アルファベット」には「太字ローマン体のアルファベット」「サンセリフのアルファベット」「フラクトゥールの……」「筆記体の……」は有っても「細字ローマン体のアルファベット」は無い。元々サンセリフのフォントを用いている場合、数学用に臨時に細字ローマン体を表そうにも、表せないのである。どうも Unicode のこういった側面は、ローマン体のフォントを前提に設計されている気がしてならない。

しかも「数学用」として登録されているラテン文字は原則「英語用の 26 文字」である。「ラテン文字は 26 文字」という認識は英語を過剰に重視した固定観念だと私などは思うのだが、「一般」の「ラテン文字」を大量に登録した Unicode の制定者ですら、この固定観念から抜けきれていないのだろうか。但、例えば「アイスランド語の数学書に代数として ðþ が現れるだろうか」といった疑念は、あいにく私の資料不足で晴れない。

(続)