Linuxの多くのディストリビューションではUTF-8という文字コードを使用しています。
EQUIUM S7100にインストールしたUbuntu Desktop 20.04.1 LTSもUTF-8を採用しています。
一方、WindowsではSJIS(Shift-JIS)という文字コードを採用しており、UTF-8と完全な互換性はありません。
そのため、SJISで保存されたテキストをUbuntuで開くと文字化けし、読むことができない場合があります。
そういった時は、nkfコマンドを使って文字コードを変換しましょう。
文字コード変換
環境
- Ubuntu Desktop 20.04.1 LTS
nkfコマンドのインストール
Ubuntu Desktop 20.04.1 LTSの初期状態では、nkfコマンドはインストールされていませんでした。
nkfコマンドがインストールされていない場合は、インストールしましょう。
1 |
$ sudo apt install nkf |
サンプルファイルのダウンロード
文字コードがSJISのファイルをダウンロードします。
今回は、郵便局の郵便番号データを使用しました。
wgetでファイルをUbuntuにダウンロードします。
1 |
wget https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/01hokkai.zip |
これで準備完了です。
文字コード変換
文字コードの確認
nkfコマンドで、ファイルの文字コードを確認することができます。
1 2 |
文字コード確認コマンド nkf -g |
使用例
1 2 3 4 5 6 7 |
$ nkf -g /tmp/01hokkai.zip BINARY ↑.zipの状態ではBINARY形式 $ zcat /tmp/01hokkai.zip | nkf -g Shift_JIS ↑zcatでファイルを展開するとSJIS(Shift_JIS)形式のファイルだとわかる |
SJISのファイルを開く
ダウンロードした、01hokkai.zipをzcatで展開すると次のような表示になり、人間では読み取ることができない表示になってしまいます。
1 2 3 4 5 6 7 8 9 10 11 |
zcat /tmp/01hokkai.zip | head 01101,"060 ","0600000","ί�����","����ۼ������","��ƹ�����������","�k�C��","�D�y�s�����"�ȉ��Ɍf�ڂ��Ȃ��ꍇ",0,0,0,0,0,0 01101,"064 ","0640941","ί�����","����ۼ������","��˶�","�k�C��","�D�y�s�����"���P�u",0,0,1,0,0,0 01101,"060 ","0600041","ί�����","����ۼ������","��������","�k�C��","�D�y�s�����"�����",0,0,1,0,0,0 01101,"060 ","0600042","ί�����","����ۼ������","��������(1-19����)","�k�C��","�D�y�s�����"������i�P�`�P�X���ځj",1,0,1,0,0,0 01101,"064 ","0640820","ί�����","����ۼ������","��������(20-28����)","�k�C��","�D�y�s�����"������i�Q�O�`�Q�W���ځj",1,0,1,0,0,0 01101,"060 ","0600031","ί�����","����ۼ������","��1�ޮ�˶","�k�C��","�D�y�s�����"�k�����",0,0,1,0,0,0 01101,"060 ","0600001","ί�����","����ۼ������","��1�ޮ�Ƽ(1-19����)","�k�C��","�D�y�s�����"�k������i�P�`�P�X���ځj",1,0,1,0,0,0 01101,"064 ","0640821","ί�����","����ۼ������","��1�ޮ�Ƽ(20-28����)","�k�C��","�D�y�s�����"�k������i�Q�O�`�Q�W���ځj",1,0,1,0,0,0 01101,"060 ","0600032","ί�����","����ۼ������","��2�ޮ�˶","�k�C��","�D�y�s�����"�k����",0,0,1,0,0,0 01101,"060 ","0600002","ί�����","����ۼ������","��2�ޮ�Ƽ(1-19����)","�k�C��","�D�y�s�����"�k�����i�P�`�P�X���ځj",1,0,1,0,0,0 |
いわゆる文字化けの状態です。
文字コード変換
文字化けした状態では使えないので、文字コード変換をします。
今回はSJISからUTF-8に変換します。
1 2 3 4 5 6 7 8 9 10 11 |
zcat /tmp/01hokkai.zip | nkf -w | head 01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0 01101,"064 ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0 01101,"060 ","0600041","ホッカイドウ","サッポロシチュウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東",0,0,1,0,0,0 01101,"060 ","0600042","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(1-19チョウメ)","北海道","札幌市中央区","大通西(1〜19丁目)",1,0,1,0,0,0 01101,"064 ","0640820","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(20-28チョウメ)","北海道","札幌市中央区","大通西(20〜28丁目)",1,0,1,0,0,0 01101,"060 ","0600031","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウヒガシ","北海道","札幌市中央区","北一条東",0,0,1,0,0,0 01101,"060 ","0600001","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウニシ(1-19チョウメ)","北海道","札幌市中央区","北一条西(1〜19丁目)",1,0,1,0,0,0 01101,"064 ","0640821","ホッカイドウ","サッポロシチュウオウク","キタ1ジョウニシ(20-28チョウメ)","北海道","札幌市中央区","北一条西(20〜28丁目)",1,0,1,0,0,0 01101,"060 ","0600032","ホッカイドウ","サッポロシチュウオウク","キタ2ジョウヒガシ","北海道","札幌市中央区","北二条東",0,0,1,0,0,0 01101,"060 ","0600002","ホッカイドウ","サッポロシチュウオウク","キタ2ジョウニシ(1-19チョウメ)","北海道","札幌市中央区","北二条西(1〜19丁目)",1,0,1,0,0,0 |
はいできました。
nkfにオプションを付けると指定した文字コードに変換できます。
いくつか代表的なオプションを書いておきます。
オプション | 内容 |
-e | EUCに変換 |
-w | UTF-8に変換 |
-j | JISに変換 |
-s | SJISに変換 |
-x | 全角カナを半角カナに変換 |
-X | 半角カナを全角カナに変換 |
-g | 文字コードを判定 |
UbuntuなどLinuxのディストリビューションを使っていると、ときどき文字コードの問題が発生します。
業務においても、Windowsアプリケーションから出力されたファイルをLinuxで処理するということがあります。
そのようなときにnkfコマンドを使えると、できることが増えて世界が広がります。
Linuxを使うなら知っておいて損はしないコマンドです。
コメント