パスワードを忘れた? アカウント作成
549414 journal

umqの日記: バイト列に意味はあるのか(012)

日記 by umq

Unicode Character Database[UCD] にはコードポイントの番号、名前、その他属性が機械で処理しやすい形式(セミコロン区切りテキスト)で格納されている。

JOINER 系について調べろということみたいなので、気がついたことをメモ。

以前のエントリで、COMBINING GRAHPEME JOINER(CGJ: U+034F) というのに触れたが、名前に JOINER を含むものは、いくつあって、それぞれどういう意味を持つものだろうか。

UCD のキモとなるファイル、UnicodeData.txt を検索してみた。
 $ grep JOINER UnicodeData.txt
 034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;

どうやら、JOINER を名前に含むものは4つあるらしい。
とりあえず、UCD の略号とともに、ひとつずつ見ていくことにしよう。

U+034F: COMBINING GRAPHEME JOINER(CGJ)
Mn: Mark, Nonspacing
NSM: Non-Spacing Mark
Nonspacing ということで、このコードでは文字送りをしない。このコードは、主に合成文字といっしょに使われて、コード列として同一の文字を区別したり(e.g. Letter U with Diaeresis と Letter U with Umlaut)、combining class value が同じ合成文字が複数ついている場合に、それらの順位を確定するために間に挟んだりする(これについては、そもそもの仕様上、合成文字の並べ替えが安定でなければならないとしているので不要ではないかとも思う)。
本来は、このコードの有無によって表示上の変化はないと考えるが、手許の環境を見る限り、CGJ を挟んだ結果、Italic や Oblique や Slant といった装飾に追随しなかったり、そもそもフォントに対応するグリフがなかったりするようである。

U+200C: ZERO WIDTH NON-JOINER(ZWNJ)
Cf: Other, Format
BN: Boundary Neutral
ZERO WIDTH ということで、このコードでは文字送りをしない。このコードは、主にペルシャ語のコンテキストで使用される。通常、筆記体では連続する文字を繋げるために字形が変ってしまうが、接頭詞、接尾詞、合成語などで語幹を区切るために連続しない字形を選択する場合がある。この場合、単語を区切るわけではないので空白を挟むのは適当でない。その用途のために、ZWNJ を使用する。
本来の用途でこのコードが使用された場合は、前後の文字に字形の変化が見られるが、その他のコンテキストでは、単に見えないということがありうる。

U+200D: ZERO WIDTH JOINER(ZWJ)
Cf: Other, Format
BN: Boundary Neutral
ZERO WIDTH ということで、このコードでは文字送りをしない。このコードは、前述の ZWNJ と同じく主にペルシャ語のコンテキストで使用される。通常、筆記体では単語の区切りなど連続しない箇所では独立形の字形となるが、ZWJ を使用することによってあえて連続形の字形にする場合がある。
本来の用途でこのコードが使用された場合は、前後の文字に字形の変化が見られるが、その他のコンテキストでは、単に見えないということがありうる。

U+2060: WORD JOINER(WJ)
Cf: Other, Format
BN: Boundary Neutral
説明文では、zero width non-breaking space とある。U+FEFF ZERO WIDTH NO-BREAK SPACE(ZWNBSP) を Byte Order Mark として使うため、用途をはっきりさせるために Unicode 3.2 から導入された。名前のとおり、文字送りをしない空白文字で、このコードを挟んだ箇所では改行しない。
現行のバージョンでは、U+FEFF はその名前に反して、ZWNBSP として使用することは非推奨(Deprecated)となっている。

UCD には、UnocodeData.txt の他に属性別のファイルもあり、それぞれのコードの意味について分類がなされている。属性を元に文字を探すという用途にはいろいろ興味深い。

参考

[ひとつまえ]

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...