【 nkf 】コマンド――文字コードと改行コードを変換するLinux基本コマンドTips(51)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「nkf」コマンドです。

» 2016年09月29日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。文字コードや改行コードを変換するための「nkf」コマンドを解説します。

nkfコマンドとは?

 「nkf」は「Network Kanji Filter」の略で、LinuxとWindowsなど、異なるOS間でテキストデータを交換する際に問題となる文字コードと改行コードを変換するためのコマンドです。


nkfコマンドの書式

nkf [オプション] [ファイル]

nkf [オプション] --overwrite ファイル

※[ ]は省略可能な引数を示しています




nkfコマンドの主なオプション

 nkfコマンドの主なオプションは次の通りです。

●出力関係
短いオプション 長いオプション 意味
-j --jis JISコードを出力する(デフォルト)
-e --euc EUCコードを出力する
-s --sjis シフトJISコードを出力する
-w,-w80 UTF-8コードを出力する(BOMなし)
-w8 UTF-8コードを出力する(BOM有り)
-w16,-w16B0 UTF-16コードを出力する(ビッグエンディアン/BOMなし)
-w16B UTF-16コードを出力する(ビッグエンディアン/BOM有り)
-w16L UTF-16コードを出力する(リトルエンディアン/BOM有り)
-w16L0 UTF-16コードを出力する(リトルエンディアン/BOMなし)
-I ISO-2022-JP以外の漢字コードを「(げた記号)」に変換する
--oc 文字コード 出力する文字コードを「EUC-JP」や「UTF-8」などで指定する
--overwrite ファイルを変換して上書きする

●入力関係(通常は自動判定なので指定不要)
短いオプション 長いオプション 意味
-J 入力をISO-2022-JPと仮定して処理を行う
-E 入力を日本語EUCと仮定して処理を行う
-S 入力をシフトJISと仮定して処理を行う。半角カナ(JIS X 0201 片仮名)も
受け入れる
-W,-W8 入力をUTF-8と仮定して処理を行う
-W16 入力をUTF-16(リトルエンディアン)と仮定して処理を行う
-W16B 入力をUTF-16(ビッグエンディアン)と仮定して処理を行う
-g --guess 自動判別の結果を出力する
--ic 文字コード 入力する文字コードを「EUC-JP」や「UTF-8」などで指定する

●改行関係(デフォルトは変換しない)
短いオプション 長いオプション 意味
-d,-Lu 改行をLFにする(UNIX系)
-c,-Lw 改行をCRLFにする(Windows系)
-Lm 改行をCRにする(OS Xより前のmac OS系)

●MIME関係
短いオプション 長いオプション 意味
-m MIMEを解読する(デフォルト、「-mS」相当)
-mB MIME base64 streamを解読する
-mQ MIME Quoted streamを解読する
-mS MIMEのチェックを厳しくする(「-mBS」のような指定が可能)
-mN MIMEのチェックを緩くする(「-mBN」のような指定が可能)
-m0 MIMEを解読しない
-M --mime MIMEに変換する(JISに変換してからbase64ヘッダ形式に変換する)
-MB --base64 MIME base64 streamに変換する
-MQ MIME Quoted streamに変換する

●半角/全角関係
短いオプション 長いオプション 意味
-X 半角カナ(JIS X 0201 片仮名)を全角カナ(JIS X 0208 片仮名)へ変換する
-x 半角カナを保存する(通常は全角カナへの変換を行う)
-Z,-Z0 全角を半角にする(JIS X 0208英数字と若干の記号をASCIIに変換する)。「-Z1」はJIS X 0208 和字間隔をASCIIスペース1つに変換。「-Z2」はASCIIスペース2つに変換。「-Z3」は「>」「<」「”」「&」を、それぞれ「>」「<」「"」「&」に変換する

●その他の整形
短いオプション 長いオプション 意味
-f 文字数 1行の文字数を指定して簡単な整形を行う(「-f」のみの場合は60桁)
--hiragana ひらがなで出力する
--katakana カタカナで出力する


文字コードと改行コードを変換する

 nkfは「nkf ファイル名」で指定したファイル、または標準入力から受け取った内容を変換して、標準出力に書き出します。デフォルトの出力はJISコードで、改行コードは変換されません。

 Linux環境で扱いやすいように、文字コードを「UTF-8」(-wオプション)、改行コードを「LF」(-dオプション)に変換するには、リダイレクトするか、「nkf -wd 元ファイル > 保存ファイル名」のように指定します。なお、入力側の文字コードは自動で判定されます。

コマンド実行例

cat 元ファイル | nkf -wd > 保存ファイル名

nkf -wd 元ファイル > 保存ファイル名

(元ファイルの文字コードをUTF-8、改行コードをLFに変換して保存する)(画面1


画面1 画面1 最初は「sampletext.txt」がUTF-8ではないため文字化けしている。nkfの「-w」オプションを通すことでUTF-8に変換され、文字化けしなくなる。同じオプションで変換後にリダイレクトして「utf8sampletext.txt」に保存した


文字コードを判定する

 「-g(--guess)」オプションを付けると、使用されている文字コードと改行コードの判定結果を表示することができます。


【筆者注】nkfのプロジェクトページ(https://osdn.jp/projects/nkf/)で配布されている最新版(nkf 2.1.4)の場合、「-g」は文字コードのみ、「--guess」は文字コードと改行コードが表示されます。CentOS 6版(nkf 2.0.8)では、「-g」「--guess」ともに文字コードを改行コードが表示されますが、改行コードの表示が不正確なことがあるようです。筆者の試した限りでは、変換には問題ありませんでした。



コマンド実行例

nkf --guess ファイル

(使用されている文字コードと改行コードを表示する)(画面2


画面2 画面2 「-g(--guess)」オプションを付けると、テキストファイルで使用されている文字コードと改行コードの推測結果が表示される


文字コードを変換してファイルを書き換える

 「--overwrite」オプションでは、指定したファイルの文字コードを変換して、直接書き換えることができます。

コマンド実行例

nkf -wd --overwrite ファイル

(-wオプションで文字コードをUTF-8に、-dで改行コードをLFに変換して、--overwrite

で上書き保存する)(画面3


画面3 画面3 画面2でシフトJIS/CRLFであることを確認したテキストファイル(sampletext.txt)を、UTF-8/LFに変換して上書き保存した


[補足1]CentOS 7にnkfをインストールするには?

 nkfはCentOS 6までは収録されていましたが、CentOS 7には入っていません。CentOS 6用のパッケージがそのまま使用できるので、「yum localinstall」(本連載第50回参照)でRPMパッケージをインストールするとよいでしょう。

コマンド実行例

yum localinstall http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm

(nkfのパッケージファイルをyumコマンドでインストールする)




[補足2]nkfをコンパイルしてインストールするには?

 nkfをコンパイルしてインストールするには、nkfのプロジェクトページからソースファイルのアーカイブをダウンロードして、展開します。

wget https://osdn.jp/dl/nkf/nkf-2.1.4.tar.gz
tar -xzvf nkf-2.1.4.tar.gz
cd nkf-2.1.4/
make
sudo make install

 「configure」はないので、展開したソースファイルは「make」コマンドでコンパイルし、「make install」でインストールしてください。マニュアルと実行ファイル(「/usr/local/bin/nkf」)がインストールされます。



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。