仕事で EUC の文字コードのファイルしか受け付けないシステムがあったので、nkf で文字コードを変換しようと思ったらインストールされてない・・・。
こんな時は iconv しかシェルで頼るものはないのですが、さすがにこれは入ってました。
(今回は IBM AIX のサーバです)
勝手にインストールができない環境だと何かで代替案を考えなければなりません。
今回は iconv での文字コード変換を紹介したいと思います。
iconvについて
iconv は一般的には変換元と変換先の文字コードの両方を指定するのですが、その文字コード文字列が OS によって大きく違うので要注意です。
例えば、FreeBSD だとシフト JIS は SHIFT_JIS を、EUC は EUC-JP、ユニコード(unicode)だと UTF-8 が一般的でしょうか。
AIXにおけるiconv
これが AIX になると、シフト JIS は IBM-943(IBM-932)、EUC は IBM-eucJP、ユニコード(unicode)は同じく UTF-8 です。
使える文字コードについては iconv の -l オプションで確認できます。
1 2 3 4 | $ iconv -l $ iconv -h Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l |
iconvの文字コード変換
iconv の文字コード変換の使い方は下記の通りです。
変換前の文字コードと変換後の文字コードを指定したら、変換後の結果が標準出力されます。
まずは UTF-8 で以下のファイルを作成します。
1 2 | $ vi hoge.txt 文字コードはUTF-8です |
このファイルを EUC-JP に変換してみましょう。
1 2 | # UTF-8 --> EUC-JP $ iconv -f UTF-8 -t EUC-JP hoge.txt > hoge_euc.txt |
hoge_euc.txt を EUC が読み込めるテキストエディタで開いてみます。
以下が文字化けせずに見えれば成功です。
文字コードはUTF-8です
nkf が使えたらそっちが早いかもしれませんが iconv も覚えておいて損はありません。
perl だと jcode とか使ってガリガリするのでしょうか。
過去に「Perlでnkfを使う」の記事を書いたのを思い出しました。
