シェル

【ハイフン】文字列をUTF8の16進数に変換して判別する

Windows や Mac, Linux など様々な環境で作業をしていると、環境依存の文字に遭遇することってありますよね。

そうでなくても、OS によって変換される文字の見え方が微妙に違う感じがして、見分けが付けにくい場面もしばしば。

今回は特にハイフン(全角、半角含む)の見分け方について、「これが確実かな」という方法を考えてみたので紹介していきます。

ハイフンの種類

個人的にハイフンと言えば、半角小文字の「-」が真っ先にイメージされますが、郵便番号の確認画面などでは全角のハイフンが使われることもありますよね。

こんなやつです。
(と言ってもわかりにくいですね)

Web サイトによっては稀に「トースト」などのカタカナの長音が使われているところもあり、見た目には違いに気付かないものです。

しかし、これらを厳密に扱おうと思うと話は別。

金融や証券など、古くから使われているシステムでは、このような文字のルールが特殊な傾向にあって、これまでも何度も悩まされてきました。

システム変更が気軽にできないのもあるでしょうが、思い切ってシステムを刷新しないとトラブルに繋がるリスクも増えてきそうです。

ちなみにハイフンに関連する文字は、私がすぐに思い浮かぶだけでも以下の 5 種類があります。

ハイフン備考
半角ハイフン
全角ハイフン
全角マイナス
全角長音
半角長音

ハイフンの判別方法

では、これらがどのハイフンなのか、実際の文字から判別してみたいと思います。

ターミナル(文字コードはUTF-8)からコマンドで確認してみましょう。

環境によっては、nkf や iconv などで、文字コード変換してから試すと確実でしょう。

iconvでファイルの文字コード変換仕事で EUC の文字コードのファイルしか受け付けないシステムがあったので、nkf で文字コードを変換しようと思ったらインストールされて...

xxd コマンドは 16 進数でダンプするものです。-p のオプションはポストスクリプト(postscript)形式のプレーンな 16 進ダンプになります。

結果は以下になります。

2d

では、残りも 16 進数の文字列に変換して、先ほどの表に追記してみます。

ハイフン16進数(UTF8)備考
2d半角ハイフン
efbc8d全角ハイフン
e28892全角マイナス
e383bc全角長音(カナ)
efbdb0半角長音(カナ)

まとめ

よく使われるハイフン文字の判別方法を紹介してきました。

テキストエディタなどに貼り付けて目視で確認することもできますが、厳密にはコードに落とし込んだ方が確実です。

ハイフン以外にも応用できる方法なので、迷った文字があったら試してみてください。

自分発信のサイトを構築していると気付かないですが、いまだに「Shift_JIS(SJIS)」や「EUC-JP」の文字コードを扱うシステムが多く残っています。

中には SJIS ではなくて、「Windows-31J(MS932)」を指定してくる場合もありますし・・・。

この辺の問題で疲弊しないように、文字コードや特殊文字について最低限の知識を持っておきたいですね。