一時期Twitterで見かけたブラウザ上で縦に伸びてくるあの文字

はじめに

f:id:spark6251:20150207044007p:plain

これ.画像はGnuPG - List of Donorsの一部のスクリーンショットである.

Unicode

文字コードの一種であり,Google IMEならばU+XXXXで変換することでその文字にできる.例えばU+0041でAとなりU+25D2で◒となる.
分かりやすく言えば「文字がいっぱいある」やつだ(雑な説明なので突っ込んではいけない).

Unicodeで定義されている文字とか諸注意とか

詳しくはCode Chartsを見れば現在Unicodeで定義されている全ての文字を閲覧することが出来る.16進数での検索も可能だ.本記事でも一部を引用した.
ちなみに定義されている名前(AならLATIN CAPITAL LETTER A)で検索したい場合はFileFormat.Info · The Digital Rosetta Stone左上のSearchをinclude related sitesにチェックを入れて利用すると良い.

また以下においてA(B)とした時は日本語ではAだがUnicodeではBでカテゴライズされていることを意味する.またA(英:B)とした時は日本語ではAだが英語ではBという名称が用いられており,且つAがUnicodeで定義がされていないことを意味する. スクリーンショットを幾つかアップロードしているが,それは全て前述のCode Chartsからである.

文字の正体・原因

そもそもこの文字は何であろうか.一番左側のUを逆にしたようなものの上に半円状の物体が連なっている部分をコピーしてUTF-16エンコードした.

\u0e01\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34\u0e34

残念ながらはてなブログのデフォルトでUnicode用のシンタックスハイライトは無さそうだ.
さてこれらの文字は何であろうか? Code Chartsで検索をすると

  • \u0e01
    • THAI CHARACTER KO KAI
  • \u0e34
    • THAI CHARACTER SARA I

であった.タイ語の教養はないがタイ語らしい.Thaiがあったので見てみると

f:id:spark6251:20150207055110p:plain

となっている.これの左上と右下がそれぞれ対応している.
\u0e34は恐らく「直前の文字がタイ語であれば上に皿をつける」といったものだろう.そしてどうやら\u0e34もタイ語として認識されているため際限なく上に皿が乗せられていくのだ.皿が乗ったもので一文字と数えられるため,良く見る「上の文に侵入する文字」が完成するのだ.

確認したが\u0e31等に関しても他の直前の文字がタイ語でなければ文字の結合(と言って良いのだろうか?)は起こらなかった.

他の言語

ラオス語(Lao)等でも同様のことが確認できたので,「直前の自身と同じ言語の上に何かを付ける」といったものが存在する言語ならば実現可能だ,多分.

ところで面白いものを見かけた.クメール語(Khmer)だ.

f:id:spark6251:20150207061033p:plain

注目したいのは\u17c0と\u17d2だ.
\u17c0はいわばカッコのようだ(見た目は).つまりAというクメール語があればA→[A]→[[A]]→…→[[[[[[[A]]]]]]]のように今度は横に広げられそうだ.
これは期待できるぞ,早速\u1780\u17C0\u17C0\u17C0\u17C0u17C0\u17C0\u17C0を早速デコードしてみた.結果は

f:id:spark6251:20150207061800p:plain

どうやら直前の1文字と結合するのは同じだが,結合は1度のみらしい.残念だ.\u17d2も特に面白いものではなかった.

結論

タイ語だったんだなあ.

おわりに

世界の文字と記号の大図鑑 ー Unicode 6.0の全グリフ

世界の文字と記号の大図鑑 ー Unicode 6.0の全グリフ

Unicode 6.0.0までの全グリフが載っています.買いましょう.

おまけ・Unicodeで定義されている文字

Unicodeはかなりの文字(絵文字等含む)の定義がされている.
2014年6月16日にはUnicode 7.0.0となり,2010年10月11日のUnicode 6.0.0の109449文字か3572文字増えた113021文字となった.
各バージョンの情報を見たければhttp://www.unicode.org/versions/components-7.0.0.htmlのバージョンの数字を変えれば良い.

文字の例

定義されている文字は現在使用されている各国の言語に留まらない.
古のルーン文字(Runic)やエトルリア文字(Old Italic),楔形文字(Cuneiform)等がある.
更にはファイストスの円盤文字(Phaistos Disc)や線文字A(Linear A),線文字B(Linear B)等の暗号すらある.ドラベッラの暗号(英:Dorabella Cipher)やヴォイニッチ手稿(英:Voynich Manuscript)は無いのだが…….ヴォイニッチ手稿は解読されていない上続け字だからまあ妥当だ.
果てには麻雀牌(Mahjong Tiles)やトランプ(Playing Cards),錬金術記号(Alchemical Symbols),点字(Braille Patterns)などなど……錬金術記号は何かに使えそうだし,良い.
あとはまあKanbunでレ点とか一二点とかを定義していたりもする.

表示できるの?

まあしかし

f:id:spark6251:20150207062310p:plain

こんなものどうやって表示するんだろう.

実装

色々述べたが定義は定義であり実装となると別問題である.現状でも結構表示されない文字が多い. まあ,気長に待つ他ない.