UNIX & Linux コマンド・シェルスクリプト リファレンス』 by SUNONE

Release: 2010/01/12
Update: 2010/01/12

UNIX & Linux コマンド・シェルスクリプト リファレンス > 文字コードと改行コード

文字コードと改行コード

文字コード

古くから 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 sjis.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 環境では LF、Windows 環境では CR+LF が一般的となっている (ちなみに MacOS 9 までの Mac は CR)。

使用されている改行コードを調べる

file textfile

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

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

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

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

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

$ 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 形式)。

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

© 2010 SUNONE