C# WPF で外字フォントを表示する

外字の定義例

業務システムを作っていると「外字」とお友達にならないといけないときがあります。

「外字ってなんやねん?」「外国の字か?!」とか言いたい気持ちはさておき、これを WPF (C#) で扱う方法を紹介します。

外字とは

このページを見ている人には蛇足と思いますが、コンピューターで言う「外字」とは既定で定義された以 を言います。

標準のフォントに入っていない人名漢字などをシステムで使用しなければならない場合に定義することがあります。基本的には「ペイント」のようにドットの集まりで文字の形を表現したものですので、↓の図でもわかるように、表示上は現代のフォントのようにきれいには表示されません。

外字の定義例

古い機能ですが、需要は変わらないので、現在の Windows でもスタートメニューから「外字エディター」と入力すると作成画面を開くことができます。そういえば昔、父がもっていたカシオのワープロでいろいろ外字をつくって遊んでたころがありました。

ちなみに英語では External (外部の) character, Extended (拡張) character などとも言いますが、 End User Defined Character (ユーザー定義文字) の頭文字をとって EUDC と呼ぶこともあります。

外字はどこにあるのか

外字は定義すると「外字フォント」が作成されます。

だいたいの場合 C:\Windows\Fonts\EUDC.tte, EUDC.tte にあるんですが、違う場合もあります。面倒ですね。

おまけに Fonts フォルダに入っていてもデフォルトの Windows の「フォント」一覧からは見ることができません。エクスプローラーのパス指定で \\PC 名\C$\Windows\Fonts\ とでも入力して生のフォルダ構造を見てやると表示することができます。

外字フォントファイル EUDC.tte の見つけ方

先人の知恵に与る

そもそも WPF で本格的に業務システムを作っている人が少ないので、さてどうするかと思案していたところ、なんとドンピシャな先人がおられました。

はい、もうほぼ全て書かれているので、私の拙い文章にあらためる必要もありません。

Window クラスの FontFamily プロパティのデフォルト値を書き換えてしまうというクレバーな方法です。

少し手を入れたバージョンを Gist に上げていますので、 App.xaml.cs (App.xaml のコードビハインド) に追加するだけです。

手を入れたのは最後のほうだけです。

フォントパスの指定のあたりは、掲載されているパス指定ではレジストリに書かれたパスが相対パスの場合にうまくいかなかったため、ルート (C:// など) が含まれるかどうかでパスの表現を変えることにしました。

また file:/// からはじまる URI に変換する際に Uri クラスの AbsoluteUri メソッドを使うようにしました。

ちなみにこのソースコードでは Shift-JIS のみ対応していますので、日本語環境以外ではコードページ (レジストリキーの 932 部分 = Shift-JIS) を変えないと機能しないと思います。

それでは「外字」と楽しい午後をお過ごしください。

SNSでもご購読できます。

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください