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
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オプション)は省略可能だが、可能な限り明示的に指定する方がよい。
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 形式)。
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 に変換されていることを確認できる。
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