nkfで文字変換して文字化けの解消

Linux
この記事は約6分で読めます。

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コマンドがインストールされていない場合は、インストールしましょう。

 

$ sudo apt install nkf



サンプルファイルのダウンロード

文字コードがSJISのファイルをダウンロードします。

今回は、郵便局の郵便番号データを使用しました。

読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便
郵便番号データのうち、「ホッカイドウ」のように促音・拗音を小書きで表記したデータをご提供しています。

wgetでファイルをUbuntuにダウンロードします。

wget https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/01hokkai.zip

 

これで準備完了です。

文字コード変換

文字コードの確認

nkfコマンドで、ファイルの文字コードを確認することができます。

文字コード確認コマンド
nkf -g

 

使用例

$ nkf -g /tmp/01hokkai.zip
BINARY
↑.zipの状態ではBINARY形式

$ zcat /tmp/01hokkai.zip | nkf -g
Shift_JIS
↑zcatでファイルを展開するとSJIS(Shift_JIS)形式のファイルだとわかる

 

 

SJISのファイルを開く

ダウンロードした、01hokkai.zipをzcatで展開すると次のような表示になり、人間では読み取ることができない表示になってしまいます。

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に変換します。

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を使うなら知っておいて損はしないコマンドです。

コメント

タイトルとURLをコピーしました