OSの文字コードとファイルの文字コードが一致していないとファイルが文字化けしてしまう。
Windowsで作成してLinuxに持ってくるよく文字化けする。
文字コードの調べ方
fileコマンドに -b オプションをつける。
ちなみにOS側の文字コードは
# echo $LANG で調べる。
# file -b testfile.txt
Non-ISO extended-ASCII text, with CRLF, NEL line terminators
何やら文字列がでてくる。下記の通り、文字コードを判別することができる。
file コマンドの出力結果 | 文字コード |
ISO-8859 text | EUC |
Non-ISO extended-ASCII text | Shift-JIS |
ASCII text | JIS |
UTF-8 text | UTF-8 |
文字コードを変換する。
iconv -f 元の文字コード -t 変換したい文字コード 対象ファイル
で変換する。
例)SHIFT_JIS から UTF8 に変換する場合
# iconv -f SHIFT_JIS -t UTF-8 testfile.txt
EUCから変換する場合は -f EUC と指定しても「iconv: `EUC’からの変換はサポートされていません」とエラーになるので下記のように指定する
# iconv -f euc-jp -t UTF-8 testfile.txt
別のファイルに保存したい場合はリダイレクトすればよい。
# iconv -f SHIFT_JIS -t UTF-8 testfile.txt > testfile2.txt
文字コードが変更されている。
# file -b testfile2.txt
UTF-8 Unicode text, with CRLF line terminators
コメント