概要

古くから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に変換されていることを確認できる