Linuxコマンド - nkf
概要
古くからUNIXの日本語環境ではEUC-JPが標準の文字コードとして使用されてきたが、近年ではLinuxの日本語環境はUTF-8が一般的になっている。
WindowsではShift-JISが標準であるため、これらの環境を同時に使用している場合、文字コードの理解と各種文字コードの相互変換作業が必要である。
nkfのインストール
パッケージ管理システムからインストール
sudo zypper install nkf
ソースコードからインストール
OSDNにアクセスして、nkfのソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。<br?
tar xf nkf-<バージョン>.tar.gz cd nkf-<バージョン>
必要であれば、nkfのインストールディレクトリを設定する。
mkdir <nkfのインストールディレクトリ> sed -e 's/^prefix\ =/prefix\ =\ <nkfのインストールディレクトリ>/g' Makefile
nkfをビルドおよびインストールする。
make prefix=<nkfのインストールディレクトリ> -j $(nproc) make prefix=<nkfのインストールディレクトリ> install
使用されている文字コードの確認
使用されている文字コードを調べるには、nkf
コマンドの-g
オプションを使用する。
echo "string" | nkf -g nkf -g <ファイル名>
以下の例では、文字コードの判別を行っている。
nkf -g Sample1.txt Shift_JIS # Sample1.txtはShift-JISで保存されたテキストファイル
nkf -g Sample2.txt EUC-JP # Sample2.txtはEUC-JPで保存されたテキストファイル
nkf -g Sample3.txt UTF-8 # Sample3.txtはUTF-8で保存されたテキストファイル
文字コードの変換
文字コードの変換を行うには、nkf
コマンドの-w
オプションを使用する。
echo "string" | nkf -w # -wオプションを指定する場合、変換後の文字コードはUTF-8になる nkf -w file
文字コードを変換するには、nkf
コマンドを使用してコマンドの標準入力に変換元文字列をパイプで接続する、
または、コマンドの引数に変換元ファイルを指定する。
nkf
コマンドの詳細は、以下のWebサイトを参照すること。
Manpage of NKF : http://manpages.ubuntu.com/manpages/hardy/ja/man1/nkf.1.html
Shift-JISからUTF-8への変換
Shift-JISからUTF-8に変換するには、nfk
コマンドの-Sw
オプションを指定する。
nkf -Sw sjis.txt
-S
オプションは、入力元の文字コードをShift-JISとするオプションであり、
-w
オプションは、出力する文字コードをUTF-8とするオプションである。
したがって、-Sw
オプションを指定する場合、変換対象文字列はShift-JISからUTF-8に変換される。
なお、変換元の文字コードの指定(-S
オプション)は省略することができる。
省略する場合、変換元の文字コードをnkf
コマンドが自動的に判別して変換が行われる。
ただし、確実な変換を行うため、変換元の文字コードが確定している場合は、明示的に変換元の文字コードを指定した方がよい。
以下の例では、nkf
コマンドを使用して、EUC-JPのファイルをUTF-8に変換している。(ターミナルの文字コードはUTF-8とする)
cat sjis.txt アフt@C ?カR[hヘ Shift-JIS ?キB # ファイルの文字コードがShift-JISであるため、UTF-8のターミナルで表示すると文字化けする
nkf -Sw sjis.txt サンプルです # nkfコマンドでUTF-8に変換すると正常に表示される
nkf -w sjis.txt サンプルです # 変換元の文字コードの指定(-Sオプション)は省略可能だが、可能な限り明示的に指定する方がよい
EUC-JPからUTF-8への変換
EUC-JPからUTF-8に変換するには、nfk
コマンドの-Ew
オプションを指定する。
nkf -Ew euc-jp.txt
-E
オプションは、入力元の文字コードをEUC-JPとするオプションであり、
-w
オプションは、出力する文字コードをUTF-8とするオプションである。
したがって、-Ew
オプションを指定する場合、変換対象文字列はEUC-JPからUTF-8に変換される。
以下の例では、nkf
コマンドを使用して、Shift-JISのファイルをUTF-8に変換している。(ターミナルの文字コードはUTF-8とする)
cat euc-jp.txt 、ウ、Υ?。・、・・ホハクサウ。シ・ノ、マ EUC-JP 、ヌ、ケ。」 # ファイルの文字コードがEUC-JPであるため、UTF-8のターミナルで表示すると文字化けする
nkf -Ew euc-jp.txt サンプルです # nkfコマンドでUTF-8に変換すると正常に表示される
nkf -w euc-jp.txt サンプルです # 変換元の文字コードの指定(-Eオプション)は省略可能だが、可能な限り明示的に指定する方がよい
改行コード
UNIX / Linux / Windowsの複合環境でテキストを扱う場合、文字コードの他に改行コードにも注意する必要がある。
以下に、各OSで使用されている改行コードを示す。
- UNIX / Linux / MacOS X以降
- LF
- Windows
- CR+LF
- MacOS X以前のMac
- CR
改行コードの確認
使用されている文字コードを調べるには、file
コマンドを使用する。
file <ファイル名>
以下の例では、改行コードの判別を行っている。
file Sample1.txt Sample1.txt: ASCII text # ファイルの改行コードはLFである (UNIX / Linux / MacOS X 形式)
file Sample2.txt Sample2.txt: ASCII text, with CRLF line terminators # ファイルの改行コードはCR+LFである (Windows形式)
file Sample3.txt Sample3.txt: ASCII text, with CR line terminators # ファイルの改行コードはCRである (旧 MacOS形式)
改行コードをLFに変換する
改行コードをLFに変換するには、nkf
コマンドの-Lu
(もしくは、-d
)オプションを使用する。
nkf -Lu textfile nkf -d textfile
以下の例では、改行コードの変換を行っている。
file Sample1.txt Sample1.txt: ASCII text, with CRLF line terminators # 変換元ファイルの改行コードはCR+LFである (Windows形式) nkf -Lu Sample1.txt > temp.txt # nkfコマンドの-Luオプションで改行コードをLFに変換して、結果をtemp.txtファイルに保存 file temp.txt temp.txt: ASCII text # fileコマンドで変換結果を確認すると、改行コードがLFに変換されていることを確認できる
改行コードをCR+LFに変換する
改行コードをCR + LFに変換するには、nkf
コマンドの-Lw
(もしくは、-c
)オプションを使用する。
nkf -Lw textfile nkf -c textfile
以下の例では、改行コードの変換を行っている。
file lf.txt lf.txt: ASCII text # ファイルの改行コードはLFである (UNIX / Linux / MacOS X以降の形式) nkf -Lw lf.txt >temp.txt # nkfコマンドの-Lwオプションで改行コードをCR + LFに変換して、結果をtemp.txtファイルに保存 file temp.txt temp.txt: ASCII text, with CRLF line terminators # fileコマンドで変換結果を確認すると、改行コードがCR + LFに変換されていることを確認できる