異体字を簡単に入力する

（2022/02/11 更新）
フォロー記事として「[異体字を安易に使用してはいけない](https://qiita.com/Mt_SQ/items/6ec6fc1b6b0d04299f92)」を投稿しました。

##はじめに
人名・地名を扱う際，「異体字」の使用を求められる場面があります。
私事ですが，亡父の名前には「龍」の字が入っていました。
思えば，父は名前を書くときに
![ryu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/43115b74-21fb-9a27-e273-69591cf9b0cd.png)
を使っていました。ずっと，書くときの癖と思って見ていました。

さて，当Qiitaはもとより，ネット上には異体字に関する多くの有益な記事が投稿されています。
一方で，IVSで割り当てられた異体字の入力方法については，探し方が悪いのか，初心者向きのスッキリとした記事が見つかりません。
ここでは，日頃使っている簡単な異体字入力方法を紹介します。
他，「怪しい文字」のコード確認についても記載しました。

##作業環境ほか
OS : Windows 10 Pro
Word : Word for Microsoft 365 MSO 32bit
Excel : Excel for Microsoft 365 MSO 32bit
PowerShell : Ver. 7.2.1 および Ver. 5.1

以下，「異体字」とはIVSによる枝番号（異体字セレクタコード）がついた異体字を示します。
また，前提条件として，異体字の表示にはフォントが対応している必要があります。
Windowsに標準搭載されている「游ゴシック・游明朝」は相当数の異体字をサポートしていますので，通常用途には十分かと思います。
さらに多くの異体字（特に人名向け）に対応する「IPAmj明朝」もよく使われています。
本稿では，Windowsで上記フォントを利用する例を示します。

##Wordは Alt + x を使う
Wordは，ショートカットキー Alt + x で，カーソル直前の文字とUnicodeを相互に変換してくれます。
異体字で表示したい文字の後に枝番号を打ち込み， Alt + x で異体字が表示されます。
![Word1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/db9e195b-4a58-8e4d-b725-84c212facafb.png)
E0101 の後で <font color=red><b>Alt + x</b> ！！</font>
![Word2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/8a7ed93d-0903-029d-6e35-1764f82eab16.png)

枝番号は，[グリフウィキ(GlyphWiki)](https://glyphwiki.org/wiki/GlyphWiki:%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%9a%e3%83%bc%e3%82%b8)などで調べることができます。
冒頭の[「龍」](https://glyphwiki.org/wiki/u9f8d)の異体字形を探すと (=u9f8d-ue0101) (=u9f8d-ue0104) の記載が見つかります。
「E0101」「E0104」の２つがIVSによる枝番号になります。

類似した字形でもフォントによって枝番号が異なります。
![Word3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/c4c5676a-e8e2-0524-2b04-b254910294b7.png)
少し古い資料ですが，「[IVD-Charts.pdf](https://unicode.org/ivd/data/2012-03-02/)」(注：約91MBあります。)を参照すると「游フォント」は「Adobe-Japan1」規格，「IPAmj明朝」は「Hanyo-Denshi」規格で枝番号を対応させるとうまくいくと思います。

##PowerShellで異体字入力
Word以外のアプリケーションには，PowerShellを使ってクリップボード経由で対象アプリに枝番号をペーストします。（Wordからコピペでもいいですが･･･）

例として，Excelで「龍」の異体字を入力します。
原理がわかっていれば手順は問いません。

<b>（１）セルのフォントを異体字に対応するものに設定</b>
ここでは「游明朝」を使います。よって，枝番号は「E0101」です。

<b>（２）PowerShellで枝番号をクリップボードにコピー</b>

```PowerShell:PowerShell&#x20;7（PowerShell&#x20;5.1未対応）
"`u{e0101}" | scb
```
または，

```PowerShell:PowerShell
[char]::ConvertFromUtf32(0xe0101) | scb
```
または，U+E01<font color=red>xx</font>を，サロゲートペア(U+DB40, U+DD<font color=red>xx</font>)に置き換えて

```PowerShell:PowerShell
-join [char[]](0xdb40, 0xdd01) | scb
```

<b>（３）Excelでペースト</b>
Excelに戻って，セル内入力中または編集中に「龍（既定の字形）」の後でペーストします。
![Excel1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/f30e61d0-e88e-0cd4-8557-96125e231f7a.png)
##PowerShellを使って文字コードを確認する
逆方向の変換についても書き留めます。
クリップボードにコピーした文字列はPowerShellで簡単に解析できます。

```PowerShell:PowerShell
gcb | fhx -e ＜エンコードの種類＞
```
＜エンコードの種類　(　)は PowerShell 7 のみ＞
`ascii` `bigendianunicode` (`bigendianutf32`) `unicode` `utf7` `utf8` (`utf8BOM`)
 (`utf8NoBOM`) `utf32` (`oem`)

先ほどExcelに入力した「龍」をクリップボードにコピーしたら，PowerShellでコードを取得してみます。

```PowerShell:PowerShell&#x20;7
(gcb | fhx -e bigendianutf32).HexBytes
# 00 00 9F 8D 00 0E 01 01  <U+9F8D U+E0101>
(gcb | fhx -e bigendianunicode).HexBytes
# 9F 8D DB 40 DD 01  <U+9F8D U+DB40 U+DD01> 枝番号をサロゲートペアで取得
```
Windows PowerShell 5.1 の場合は

```PowerShell:PowerShell
# PowerShell 5.1 は HexBytes が使えない
(gcb | fhx -e bigendianunicode).Bytes.ForEach{$_.ToString("X2")} -join " "
# 9F 8D DB 40 DD 01
# または（２バイト単位で）
(gcb).ToCharArray().ForEach{([int]$_).ToString("X4")} -join " "
# 9F8D DB40 DD01
```

##余談
世間には異体字も含めて多様な「文字」が飛び交っており，pdf文書にも「怪しい文字」が紛れ込んでいることがあります。
たとえば，以下の３行は左右の文字がそれぞれ異なるものですが，ブラウザ環境によっては目視で違いが確認できません。下の各行をコピーして，PowerShellで確認してみます。

* <b>⾷ 食</b>
* <b>杮 柿</b>
* <b>ば ば</b>

１行目から順に

```PowerShell:PowerShell&#x20;7
(gcb | fhx -e bigendianunicode).HexBytes
# 2F B7 00 20 98 DF  <左 U+2FB7 右 U+98DF>
```

```PowerShell:PowerShell&#x20;7
(gcb | fhx -e bigendianunicode).HexBytes
# 67 6E 00 20 67 FF  <左 U+676E 右 U+67FF>
```

```PowerShell:PowerShell&#x20;7
(gcb | fhx -e bigendianunicode).HexBytes
# 30 6F 30 99 00 20 30 70  <左 U+306F U+3099 右 U+3070>
```

## 参考

* [Unicode IVS/IVDについて | 一般社団法人 文字情報技術促進協議会](https://moji.or.jp/mojikiban/aboutivs/)

* [グリフウィキ(GlyphWiki) メインページ](https://glyphwiki.org/wiki/GlyphWiki:%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%9a%e3%83%bc%e3%82%b8)