2013年9月4日水曜日

顔文字の豆腐化を見て

どこかからコピペしたようなコメントが豆腐になっているのを見かけることがあります。先日下図のような顔文字を見て、もしやとChromeで表示させてみると豆腐になりませんでした。ちょっと気になって調べてみました。


この顔文字を構成する文字は下図の通りでした。

これらの文字のWindowsコードページにおける定義の有無と、Arial・Lucida Sans Unicode・MS Pゴシックの各CMapにおける定義の有無を以下に示します。CMapはWindows 7のもので見ています。

Unicode ブロック名 Windowsコードページ Arial LSU MS Pゴ
0020 基本ラテン文字 (ASCII互換) CJK各コードページおよび1250~1258 3 3 16076
0028 基本ラテン文字 (ASCII互換) CJK各コードページおよび1250~1258 11 11 16084
0029 基本ラテン文字 (ASCII互換) CJK各コードページおよび1250~1258 12 12 16085
03C9 ギリシア文字及びコプト文字 CJK各コードページおよび1253 550 752 16616
1555 統合カナダ先住民音節 - - - -
1557 統合カナダ先住民音節 - - - -
207E 上付き・下付き - - 1041 16951
208D 上付き・下付き - - 1056 16966
25D3 幾何学模様 - - 1691 17799
25D4 幾何学模様 - - 1692 17800

表の上4文字はコードページ1250~1258のいずれかに定義があることから、IEではArialで表示されていると思います。ChromeでもArialにあるものはArialで表示されるようなのでIEと同じでしょう。
「統合カナダ先住民音節」の2文字(手の部分)に対応するフォントは、Windows 7に2つしかありませんでした(8でも同様)。


Gadugiは丸の部分の幅が均一な字形のようなので、Euphemiaの方でしょうか。しかしこんなのよく見つけますね。

表の下4文字はいずれもArialにありませんが、LucidaにはあるのでChromeではこれが表示されているのでしょう。問題はIEの表示です。Lucidaやゴシック以外にも対応しているフォントは多数あるのに、3文字がArialの豆腐になっています。
なぜ右端のU+207Eは豆腐にならないのでしょうか。上の推測からすると、これだけがArialではない文字と隣接しています。試しに左の部分からU+0020(半角スペース)を削除してU+208DをU+1555に隣接させると、豆腐にならなくなりました。


ちなみにこうして表示されたU+208Dは、Windows 7と8ではフォントが異なるようです。


Windows 7ではゴシックに隣接した場合と同じ字形に見えますが、8では違っています。Segoeなのかもしれません。

さて、この顔文字を修正してみます。Arialに定義が無いゼロ幅文字を、豆腐化している文字の前へ挟んで隣接させました。
U+FEFFを使った場合:


Windows 7では上手くいきましたが8ではなぜかU+FEFFが豆腐になってしまいました。U+FEFFの使い方はもっと研究が必要なようです。
U+2029を使った場合:


これは大丈夫でした。上でも触れたように、8では豆腐でなくなった文字のフォントが7と違うようですが。
なおU+2029はワードパッド上でコピペすると改行に変換されてしまうという問題があったので、もう一つ試しました。
U+0085を使った場合:


表示はU+2029の時と変わりませんでした。U+0085・2029は制御文字なので、そもそもフォントは関係ないかもしれません。少なくともArialでないことは確かです。Arial以外の文字と隣接することにより、豆腐化せずに他のフォントへフォールバックするという仕組みなんでしょうか。
一方Chromeでは上のどのパターンも表示に影響はありませんでした。


ただしこの顔文字、XPでは豆腐化を避けられません。「統合カナダ先住民音節」に対応するフォントが入っていないからです。


VistaはEuphemiaが入っているようなので7と同じ表示かもしれません。
参考までにAndroidでも見てみました。


XP上のIEで豆腐化した部分が空白になった形です。
ググったら、この顔文字がFacebookなどで使われているケースをいくつか見つけました。こうして見ると、元々あまりおすすめの顔文字とは言えなそうですが。

0 件のコメント:

コメントを投稿