文字コードと改行コード
文字コード
古くから 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 コマンドの詳細は、以下のページを参照。
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 に変換されていることを確認できる。