2013年1月20日日曜日

Windows 8:タイ文字化の場合

Windows 8で、Segoe UI Symbolが表示されるケースは一様ではないという話を前に書きました。
例として挙げた特殊文字U+2639(困ったちゃんマーク)とU+261D(指差しマーク)で挙動の違いを見てみます。


まず単独の状態が異なります。U+2639は8・7ともに初期状態のArialと思われます。ただしグリフが無いので豆腐です。U+261DもArialにはありませんが、これは8ではSegoe UI Symbol・7ではゴシックで表示されています。
「あ」に隣接するとゴシックの字形になるのは共通しています。この件で8・7の表示を統一させるには、これが解決法なのでしょう。もっともChromeとの差異はそれでは解決しませんが(Arial Unicode MSの問題)。

SimSun化させた場合、U+2639もU+261DもSimSunにはありませんので代替表示となります。7ではフォントリンクが参照されます。しかし8ではこれが起きたり起きなかったりします。わかりやすくするため、リンク先のMS P明朝を削除してみます。


フォントリンクで代替表示されていた部分が全角幅の透明に変わります。


8のU+261Dはフォントリンクの影響を受けないことがわかります。「ゴシック化」されない限り元のSegoe UI Symbolのままです。
8のSimSun化では、U+2639も後ろに「あ」 をつければSegoe UI Symbolで表示されます。U+2639とU+261Dの違いは今のところわかりません。Unicodeの属性やコードページの定義とは関係ないようなので、内部的に独自の分類があるのかもしれません。

ところで、8の表示でタイ文字化の場合を見てなかったので試してみました。
「タイ文字化」 という表現はテキトーです。タイ文字はWindowsのバージョンによって表示に使われるフォントが異なるため、他に何と言えばよいのかわかりません。8ではCordia New、7ではDokChampaというフォントになります。いずれにもU+2639やU+261Dが無いのはSimSunと同じで、やはり代替表示が起きます。


ただしSimSunとは異なり、どちらもフォントリンクは登録されていません。代替表示は内部的な別のプロセスによるもののようです。試しにそれぞれのフォントリンクを登録してみました。リンク先はMS UI Gothicにします。


「あ」 もいずれのフォントにもありません。その字形が変わることにより、フォントリンクが参照されたのがわかります。ちなみにXPでタイ文字の表示に使われるTahomaは元から上のようにフォントリンクが登録されていて、「あ」はこの字形で表示されます。


しかし8のU+2639やU+261Dの方は、Segoe UI Symbolのままで変化がありません。また「あ」がついてるかついていないかも関係ありません。冒頭のSimSun化で見られた両者の違いは、あくまでCJKのフォント変化の中で発生することみたいです。

これをやってて今さら気づいたのですが、フォントリンクを追加する前の「あ」はタイ文字化の影響を受けていないですね。そうでないと、7の表示でU+2639・U+261Dだけ巨大化しているのが説明できないからです。
 「あ」 というCJK文字はCJKフォント(デフォルトはMS Pゴシック)で表示する、ただしフォントリンクを使うとそっちが優先するという仕組みなんじゃないでしょうか。そう言えばArialのフォントリンクを登録すると、ひらがなや漢字をリンク先のフォントで表示することができます。

U+2639・U+261Dは「あ」と違って何語の文字という区別が無く、こうしていろいろ変化してしまうんじゃないでしょうか。これはコードページの定義の有無に由来してるのかなと思います。

Unicode cp874 cp932 cp936 cp949 cp950 cp1250-1258
0E01 A1 - - - - -
261D - - - - - -
2639 - - - - - -
3042 - 82A0 A4A2 AAA2 - -

U+2639・U+261Dのような文字がArialに無ければ、Segoe UI Symbolで統一するのが8のルールなのかもしれません。冒頭の例のような差異は、そのルールと別のルールとが競合しているように見えるんですが。

0 件のコメント:

コメントを投稿