LoginSignup
0
1

More than 1 year has passed since last update.

iconvを使って、文字コードを変換する

Last updated at Posted at 2022-04-15

環境

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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1