環境
Ubuntu 20.4
やったこと
S-JISで作成したtest.txtを、Ubuntuで表示すると、このように文字化けを起こします。
$cat test.txt
◆◆◆◆◆
◆◆◆◆◆
◆◆◆◆◆
Ubuntuで文字コードを変換するには、iconvを使います。iconvで扱える文字コードの一覧を表示してみます。
$iconv -l
沢山の文字コードが扱えるようになっているが、今回は、S-JISとUTF-8が使えればOKです。
$iconv -l | grep -e UTF-8 -e SJIS
S-JISのファイルを、UTF-8に変換して表示してみます。オプションfで、読み込みファイルの文字コードを指定し、オプションtで、出力する文字コードを指定します。
$iconv -f sjis -t utf8 test.txt
あああ
いいい
ううう
出力する文字コードはデフォルトで、UTF-8になっているため、-t utf8は省略して、このように記述してもOKです。
$iconv -f sjis test.txt
あああ
いいい
ううう
ファイルの文字コードを調べたい場合は、nkfコマンドを利用します(この手のコマンドは、恐らく、nkfくらいしかなさそうです)。iconvは文字コードを変換することはできるが、現在のファイルの文字コードを確認することはできないようです。
nkfはUbuntuにはデフォルトで入っていないため、インストールすることになります。なお、nkfは、iconvのように、文字コードを変換する機能も持っています。
nkfをインストールします。
$sudo apt-get update
$sudo apt-get install nkf
インストールされたことを確認します。(因みに、nkfは富士通が開発しています。)
$nkf -v
nkfで文字コードを調べる場合は、このようにします。
$nkf --guess test.txt
$nkf -g test.txt
Shift-JIS(CRLF)
iconvでS-JISをUTF-8に変換して、別ファイルに保存します。
$iconv -f sjis -t utf8 test.txt > test_utf8.txt
UTF-8に変換されたことが確認できました。
$nkf --guess test_utf8.txt
UTF-8(CRLT)
文字化けせずに表示されるようになりました。
$cat test_utf8.txt
あああ
いいい
ううう
UTF-8をS-JISに変換して表示してみると、当然、文字化けを起こします。
$iconv -f utf8 -t sjis test_utf8.txt
◆◆◆◆
◆◆◆◆
◆◆◆◆
次は、UTF-8からS-JISに戻してみましょう。
$iconv -f utf8 -t sjis test_utf8.txt > test_sjis.txt
S-JISになりました。
$nkf --guess test_sjis.txt
Shift_JIS (CRLF)
UTF-8のファイルを、S-JISとして読み込んでみるとどうなるかやってみます。当然、エラーになりました。
$iconv -f sjis -t utf8 test_utf8.txt
iconv: illegal input sequence at position 8
補足
nkfを使って、test.txtの文字コードを調べるには、このような標準的な書き方をする以外に、
$nkf --geuss test.txt
catでファイルを開いて、パイプを使ってnkfに標準入力を渡すといった使い方もできます。
$cat test.txt | nkf --guess