font
unicode
漢字
Fusic Day 16

「それ本当に外字ですか?」と聞くための準備

普段はインフラとかをやっているはずなんです。

外字とは

https://kotobank.jp/word/%E5%A4%96%E5%AD%97-2202

ユーザーまたはメーカーが独自に作成して登録した文字。
ユーザー定義文字とも呼ぶ。
JISコード表に含まれていない、異字体や記号などを利用したい場合に作成する。
Windows 98などでは、付属する外字エディターで外字を作成し、登録できる。

ざっくり言うと、「文字コードで表現できないので、独自に拡張した文字」のこと。

いつ使うのよ

多くは人名・地名でのマイナー漢字。
あと「㌢㍍」よろしく独自記号を使いたいなんて場合にも使われるけど、これは今回の話の対象外です。

人名における外字の具体例

マイナー漢字

漢字はJISの規格で第1~第4水準に分類されます。
このうち第3水準、第4水準の漢字はShift_JISの文字コードで定義されていないものが多い。
そういった漢字を使用する際に、外字として登録しているケース。
※ 実際に遭遇した例としては、「㐂」とか「昱」とか。
※ 「第2水準だけど、その文字が見つからないから外字で登録した」ってケースも割とあります。

あと別の例として、中国語でのみ使われる漢字なんてのも。

異体字

有名なのは「高」に対する「髙(はしごだか)」みたいな。
これはかなり種類が多く、例えば「辺」の異体字だと

と収拾つかないくらい存在するわけで。
で、表示できない異体字を外字として登録しているケース。

外字を運用する上での問題点

要は「ユーザ独自で定義するもの」なので、各々ばらばらに登録・管理していると

  • 同じ文字コードなのに違う文字が出る
  • 特定のPCでしか文字が表示されない

といった問題が発生します。
これを解消するべく、外字を管理・配布するサーバもあったりするくらい。

それ本当に外字でないといけないの?

ようやく本題。

このうち第3水準、第4水準の漢字はShift_JISの文字コードで定義されていないケースが多く、それらを使用する際に外字を登録していました。

と書いたんですが、システムで使用する文字コードがUTF-8の場合、「外字で取り扱わなければいけない漢字」はほとんど存在しません。

マイナー漢字(第3・第4水準漢字)

Unicodeにおいては、全て定義済みです。
中国語の漢字についても同様に定義されているので、使用可能です。

異体字

これもUnicodeにおいては定義されているものの、少し定義の仕方が違います。
通常の文字を表すコードに加え、IVSというセレクタの値を用いて異体字を区別しています。
具体的な例は
- http://mojikiban.ipa.go.jp/1292.html
- http://mojikiban.ipa.go.jp/1792.html

あたりを読むと分かりやすいかと。

例外

現(2017年12月)時点ではまだ、文字コードが割り当てられてない文字が存在します。

http://glyphwiki.org/wiki/Group:%E6%96%87%E5%AD%97%E6%83%85%E5%A0%B1%E5%9F%BA%E7%9B%A4-%E7%AC%A6%E5%8F%B7%E5%8C%96%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E6%96%87%E5%AD%97

とは言えこれらも含め、2017年度末(2018年3月末)で全文字の符号化が完了する予定となっています。

( http://mojikiban.ipa.go.jp/1309.html 「符号化状況」より引用 )

2018年度中には、対応フォントで取り扱えるようになるのではないでしょうか。

入力の仕方

普通に変換できるケースもありますが、そうではない場合や読みが分からない場合。

1. 探す

http://mojikiban.ipa.go.jp/search/

で探す。
※ 画数は「10-12」のような範囲指定が可能なので、多少探しやすいかと。

2. 見つけたらコピー

例えば「萩」の異体字を探していた場合

http://mojikiban.ipa.go.jp/search/#detail/MJ022249

ちゃんと「コピペフィールド」が用意されているので、コピー

3. ペースト

以下PowerPointでペーストした例。

2017-12-11_17h01_13.png

フォントがIVSに対応していない場合、文字コード部のみで判定される。

エディタによっては

2017-12-11_17h03_21.png

てな感じで、後ろに変な記号が入ったりする。この部分がIVS。

ブラウザにも同様にペーストできるんですが。
入力フォーム部分、表示部分ともIVS対応フォントで表示するようCSSで指定しておかないと、ちゃんと入力されているか非常に判断しづらい。
※ 見た目には普通の「萩」が入力されているようにしか見えない。

IVSに対応したフォント

上記例のIPAmj明朝がおそらくもっとも有名かと。
他のフォントを使用したい場合は
https://citpc.jp/product_font.html
あたりで探していただくのがよいかと思われます。

それでも困るケース

というわけで、UTF-8で統一されている環境だったら困らない状況は割と整っています。
しかしそれでも困るケースはあるわけで

  • 深遠な理由でShift_JISで出力しなきゃいけない
    • もっともこの場合は第3水準・第4水準もわりかしアウト
  • 対応したフォントを使えない
  • IPAも把握していない謎の文字を使っている

なんてケースはカバーしようがないです。

BOM使えば解決するケースもあるにはある

ただし、WindowsとExcel、およびCSVの話であれば回避できるケースがあります。
ExcelでCSVファイルをそのまま(それこそダブルクリックとかで)開いて使用する場合、

  • Shift_JISのCSVファイル: 文字化けしない
  • UTF-8のCSVファイル: 文字化けする

という問題にぶち当たるんですが。
BOM(Byte Order Mark)付きのUTF-8であれば、そのままExcelで開いても文字化けしなかったりします。

要件などもろもろクリアになるのであれば、BOM付UTF-8を使うという選択肢もなくはないです。
※ とは言え、BOM付きUTF-8であまりいい思い出がないのも事実ですが。。。

というわけで

「それ本当に外字ですか?」とクライアントに聞ける環境は、わりかし整っているというお話でした。

  • データ移行で正しくマッピングしてあげなきゃいけない
  • そもそも該当する文字を探すのが大変
  • どこかでShift_JISが必須なもんでやっぱり導入できない

なんて話もあったりなかったりしますが、まあそれはそれ。

まとめ

自分の投稿のタグがばらばらすぎて、何屋さんなんだろうと思います。