エンコーディングを変換したい(nkf)

$ nkf -g path/to/file.txt
UTF-8

$ nkf -w --overwrite path/to/file.txt

nkfは、ファイルのエンコーディングや改行コードを変換するコマンドです。

最近は使うことが少なくなってきましたが、昔のファイルを開く際に役に立つことがあります。 また、Windowsのメモ帳で作成されたテキストファイルは、 Shift JIS になっていることがあるので、 macOSで読むにはUTF-8への変換が必要です。

インストールしたい(nkf)

$ brew install nkf
$ nkf --version
Network Kanji Filter Version 2.1.5 (2018-12-15)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2018, The nkf Project.

nkfはHomebrewでインストールできます。

エンコーディングを調べたい(--guess / -g)

$ nkf --guess path/to/file.txt
$ nkf -g path/to/file.txt
UTF-8

--guessオプションで、ファイルのエンコーディングを調べることができます。

UTF-8に変換したい(-w)

// 標準出力
$ nkf -w path/to/file.txt

// ファイルにリダイレクト
$ nkf -w path/to/file.txt > path/to/file_utf8.txt

-wオプションで、ファイルをUTF-8に変換します。 変換した結果は標準出力に表示されます。 リダイレクトしてファイルに保存できます。

Shift_JISに変換したい(-s)

$ nkf -s path/to/file.txt

-sオプションで、ファイルをShift_JISに変換します。 -w(UTF-8への変換)とは逆方向で、古いWindows環境向けにファイルを渡すときに使います。

改行コードを変換したい(-L)

// LF(Unix/macOS)に統一
$ nkf -Lu path/to/file.txt

// CRLF(Windows)に統一
$ nkf -Lw path/to/file.txt

// CR(旧Mac OS)に統一
$ nkf -Lm path/to/file.txt

-Lオプションで、改行コードを変換できます。 Windowsで作成したファイルはCRLFになっていることが多いので、 -LuでLFに統一しておくと、Unix系のツールと相性がよくなります。

注釈

改行コードがOSによって異なるのは、タイプライターやテレタイプ端末の動作に由来する歴史的経緯があります。 本来「CR(Carriage Return、復帰)」は印字ヘッドを行頭に戻す動作、「LF(Line Feed、改行)」は紙送りで次の行に進める動作で、 別々の物理動作でした。

  • CR(\r): 旧Mac OS(〜OS 9)が採用。復帰の動作のみ

  • LF(\n): Unix系OSが、復帰と改行をまとめて簡略化

  • CRLF(\r\n): DOS/Windowsが、テレタイプ由来の2動作をそのまま踏襲

ひらがな・カタカナを変換したい(--hiragana / --katakana)

// カタカナに変換
$ echo "こんにちは" | nkf --katakana

// ひらがなに変換
$ echo "コンニチハ" | nkf --hiragana

--katakanaでひらがなをカタカナに、--hiraganaでカタカナをひらがなに変換できます。

ファイルを上書きしたい(--overwrite)

// UTF-8に変換して上書き
$ nkf -w --overwrite path/to/file.txt

--overwriteオプションで、入力ファイルをそのまま上書きして保存できます。

注釈

似たオプションに--in-placeがあります。 --overwriteは元ファイルのタイムスタンプを保持しますが、--in-placeは上書き時にタイムスタンプが更新されます。