文字コードと改行コード

文字コード

古くから UNIX の日本語環境では EUC-JP が標準の文字コードとして使用されてきたが、近年の多く普及している Linux の日本語環境は UTF-8 が一般的になっている。さらに Windows では Shift-JIS が標準であるため、これらの環境を同時に使用している場合は、文字コードへの理解と各種文字コードの相互変換作業が必要となってくる。

使用されている文字コードを調べる

echo "string" | nkf -g
nkf -g file

→使用されている文字コードを調べるには nkf コマンドの -g オプションを使用する。

ファイルなどに使用されている文字コードを調べるには、後述する文字コードの変換に使用する nkf コマンドの -g オプションを使用する。

実際に文字コードの判別を行ってみる。

$ nkf -g sjis.txt
Shift_JIS
#↑sjis.txt は Shift-JIS で保存されたテキストファイル。

$ nkf -g euc-jp.txt
EUC-JP
#↑euc-jp.txt は EUC-JP で保存されたテキストファイル。

$ nkf -g utf-8.txt
UTF-8
#↑utf-8.txt は UTF-8 で保存されたテキストファイル。

文字コードを変換する

echo "string" | nkf -w
nkf -w file

→文字コードの変換には nkf コマンドを使用する。

文字コードを変換するには nkf コマンドを使用し、コマンドの標準入力に変換元文字列を流し込むか、もしくはコマンドの引数に変換元ファイルを指定する。

上記の例では nkf -w のように、-w オプションを指定しているので、変換後の文字コードは UTF-8 になる。

nkf コマンドの詳細は、以下のページを参照。

Manpage of NKF

Shift-JIS から UTF-8 に変換する

nkf -Sw sjis.txt

→Shift-JIS から UTF-8 に変換するには -Sw オプションを指定する。

  • -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
このファイルの文字コードは Shift-JIS です。
#↑nkf コマンドで UTF-8 に変換すると正常に表示される。

$ nkf -w sjis.txt
このファイルの文字コードは Shift-JIS です。
#↑変換元の文字コードの指定(-Sオプション)は省略可能だが、可能な限り明示的に指定する方がよい。

EUC-JP から UTF-8 に変換する

nkf -Ew euc-jp.txt

→EUC-JP から UTF-8 に変換するには -Ew オプションを指定する。

  • -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
このファイルの文字コードは EUC-JP です。
#↑nkf コマンドで UTF-8 に変換すると正常に表示される。

$ nkf -w euc-jp.txt
このファイルの文字コードは EUC-JP です。
#↑変換元の文字コードの指定(-Eオプション)は省略可能だが、可能な限り明示的に指定する方がよい。

改行コード

UNIX / Linux / Windows の複合環境でテキストを扱う場合、文字コードの他に改行コードにも注意する必要がある。

改行コードは、

  • UNIX / Linux / Mac 環境では LF
  • Windows 環境では CR+LF
  • (Mac OS X 以前の Mac は CR)

が一般的となっている。

改行コードを調べる

file textfile

→使用されている文字コードを調べるには file コマンドを使用する。

テキストファイルの改行コードを調べるには、file コマンドに対象となるテキストファイルを指定する。

実際に改行コードの判別を行ってみる。

改行コードが LF

$ file lf.txt
lf.txt: ASCII text

ファイルの改行コードは LF (UNIX / Linux / Mac 形式)。

改行コードが CR+LF

$ file crlf.txt
crlf.txt: ASCII text, with CRLF line terminators

ファイルの改行コードは CR+LF (Windows 形式)。

改行コードが CR

$ file cr.txt
cr.txt: ASCII text, with CR line terminators

ファイルの改行コードは CR (旧 Mac 形式)。

改行コードを LF に変換する

nkf -Lu textfile
nkf -d textfile

→改行コードを LF に変換するには nkf コマンドの -Lu (もしくは -d ) オプションを使用する。

実際に改行コードの変換を行ってみる。

$ file crlf.txt
crlf.txt: ASCII text, with CRLF line terminators
#↑変換元ファイルの改行コードは CR+LF (Windows 形式)。

$ nkf -Lu crlf.txt >temp.txt
#↑nkf コマンドの -Lu オプションで改行コードを LF に変換し、結果を temp.txt ファイルに保存。

$ file temp.txt
temp.txt: ASCII text
#↑file コマンドで変換結果を確認すると改行コードが LF に変換されていることを確認できる。

改行コードを CR+LF に変換する

nkf -Lw textfile
nkf -c textfile

→改行コードを CR+LF に変換するには nkf コマンドの -Lw (もしくは -c ) オプションを使用する。

実際に改行コードの変換を行ってみる。

$ file lf.txt
lf.txt: ASCII text
#↑ファイルの改行コードは LF (UNIX / Linux / Mac 形式)。

$ 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 に変換されていることを確認できる。