概要
nkf(Network Kanji Filter)は、テキストファイルの文字コードや改行コードを自動判定し、指定した形式へ変換するためのツールです。レガシーシステムから出力されたShift_JIS形式のCSVファイルや、Windows環境で作成された改行コード(CRLF)を含むファイルを、Linux標準のUTF-8やLFへ一括変換するデータ移行の現場で重宝されます。
仕様(引数・オプション)
構文
nkf [オプション] [入力ファイル名]
文字コード変換・判定オプション
| オプション | 説明 |
| -g | 入力ファイルの文字コードを自動判定して表示します。 |
| -j | 出力をJIS(ISO-2022-JP)に変換します。 |
| -e | 出力をEUC-JPに変換します。 |
| -s | 出力をShift_JISに変換します。 |
| -w, -w8 | 出力をUTF-8(BOMなし)に変換します。 |
| -w16 | 出力をUTF-16に変換します。 |
| –oc=コード | 出力の文字コードを明示的に指定します。 |
| -J | 入力をJISと仮定して処理します。 |
| -E | 入力をEUC-JPと仮定して処理します。 |
| -S | 入力をShift_JISと仮定して処理します。 |
| -W, -W8 | 入力をUTF-8と仮定して処理します。 |
| -W16 | 入力をUTF-16と仮定して処理します。 |
| –ic=コード | 入力の文字コードを明示的に指定します。 |
改行コード・特殊処理オプション
| オプション | 説明 |
| -Lw | 改行コードをWindows形式(CRLF)に変換します。 |
| -Lu | 改行コードをUnix形式(LF)に変換します。 |
| -Lm | 改行コードを古いMac形式(CR)に変換します。 |
| -r | ROT13(文字を13文字分ずらす簡易暗号化・復号)を適用します。 |
| -mQ | MIMEのQuoted-printableを解読します。 |
| -mB | MIMEのBase64を解読します。 |
| -mO | MIME変換を無効にします。 |
| -M | MIME形式に変換して出力します。 |
| -MB | MIME形式(Base64)に変換して出力します。 |
| -x | 半角カナを全角に変換せず、そのまま保持します。 |
| -X | 半角カナを全角カナに変換します。 |
| -B | 壊れた(Broken)JISコードを修正して読み込みます。 |
基本の使い方
外部ベンダーから納品されたレガシーなShift_JIS形式の顧客管理リストを、Linuxサーバー上で扱うためにEUC-JPへ変換する手順です。
BASH
# mori ユーザーが古い顧客データをEUC-JPに変換して保存
nkf -e /home/mori/imports/legacy_customer_list.csv > /home/mori/exports/customer_euc.csv
# 変換後の文字コードを確認
nkf -g /home/mori/exports/customer_euc.csv
TEXT
EUC-JP
実践コマンド
Windowsで作成されたログファイルを、Linux環境の標準である「UTF-8」かつ「改行コードLF」へ一括で正常化するシナリオです。
BASH
# Windows形式(Shift_JIS/CRLF)のシステムログを UTF-8/LF に変換
# 入力ファイル:system_log_win.log
nkf -w -Lu /var/data/mori-service/system_log_win.log > /var/data/mori-service/system_log_linux.log
# 変換後の改行コードの状態を含めて情報を確認
file /var/data/mori-service/system_log_linux.log
TEXT
/var/data/mori-service/system_log_linux.log: UTF-8 Unicode text
カスタムポイント
- 出力形式の選択:
-w(UTF-8)の代わりに-s(Shift_JIS)や-e(EUC-JP)を使い分けることで、接続先システムの要求に応じた変換が可能です。 - 上書き保存:
--overwriteオプションを付与することで、リダイレクトを使わずに元のファイルを直接変換後の内容で更新できます。 - 改行コードの制御:
-Lwを指定すれば、Linuxで作成したテキストをWindowsユーザーがメモ帳などで正常に閲覧できる形式に変換できます。
注意点
- 自動判定の誤認: 極端に短いファイルや、複数の文字コードが混在しているファイルでは
-gによる自動判定が失敗することがあります。その場合は-Sや-Wで入力側を明示してください。 - BOMの扱い: UTF-8に変換する際、デフォルトではBOM(Byte Order Mark)は付与されません。特定のソフトウェアでBOMが必要な場合はオプションを確認してください。
- 半角カナ: デフォルトでは半角カナが全角カナに変換される挙動をとるため、半角を維持したい場合は
-xオプションが必須となります。
応用
セキュリティ担当の mori ユーザーが、簡易的な難読化(ROT13)を使用して、内部向けの作業連絡ファイルを一時的に読めない状態にする、または元に戻す例です。
BASH
# 連絡事項ファイルをROT13で難読化(アルファベットを13文字ずらす)
nkf -r /home/mori/memos/secret_briefing.txt > /home/mori/memos/encrypted_memo.txt
# 難読化されたファイルを元の状態へ復元
nkf -r /home/mori/memos/encrypted_memo.txt
TEXT
# 難読化前
Team mori: Deployment scheduled for tonight.
# 難読化後(encrypted_memo.txt)
Grnz irom: Qrcyblzrag fpurqhyrq sbe gbavtug.
まとめ
nkfコマンドは、文字コードや改行コードの差異によって発生する文字化けやプログラムの誤作動を解消するために極めて有効なツールです。自動判定機能による手軽な変換だけでなく、改行コードの統一やROT13による簡易的なテキスト加工まで幅広く対応できるため、異種OS間でのデータ連携や古い資産の移行作業において不可欠な存在と言えます。変換の際には、元のデータのバックアップを確保した上で、-g による判定結果を都度確認しながら最適なオプションを組み合わせて実行することが推奨されます。
