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

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

## 外字とは

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

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

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

## いつ使うのよ

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

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

### マイナー漢字

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

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

### 異体字

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

![](http://www.shakado.jp/goods_image/A550_Z3.jpg)

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

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

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

- 同じ文字コードなのに違う文字が出る
- 特定の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/contents/2012/07/69c216592326d4230c42908508da4cce.png)
( 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](https://qiita-image-store.s3.amazonaws.com/0/54590/23e5c76b-1e50-7432-6c0a-79ff4766feb3.png)

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

エディタによっては

![2017-12-11_17h03_21.png](https://qiita-image-store.s3.amazonaws.com/0/54590/a568545a-3d15-bbcb-c7dc-8f2714816386.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が必須なもんでやっぱり導入できない

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

## まとめ

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