文字コードの変換(nkfを利用して)

2010/11/23未分類import
文字コードの変換はLinuxとWindowsで同一のテキストファイルを編集したりする際に必須となる.
私がずっと前から利用しているのはnkfという非常に古い(どのくらい古いのかも私は知りません)プログラム.
古いというのは,信頼性が高いということでもあるので,気にする必要はない.
Debianでもパッケージ化されているし(最初に入っていたかはわからない).
何かプログラムに組み込んで使うならiconvというやつも良いと思う.

簡単に文字コードとは

文字コードとは,文字とバイト表現の対応関係のこと.
例えばアルファベットの「A」はASCII文字コードでは,16進数の「0x41」*1というバイト表現に置き換えている(正確で詳細な情報はリンク先をどうぞ).
このような文字とバイト表現の対応はOSやプログラムといった環境によって異なる.
基本的に日本語文字コードは,Linux環境ではEUC-JPUTF-8,Windows環境ではShift-JISというものが使われている.
使用している環境と異なる文字コードで記述されたテキストファイルをエディタで開くと,
文字コード変換機能が搭載されていないエディタでは,文字化けを起こす.
環境と異なる文字コードのファイルを扱うことは不都合も多い.
よって何らかの方法で文字コードを変換することが必要となる.
ここで紹介する方法は上述の通りnkfというプログラムを使った方法である.
対応文字コードは,EUC-JP,UTF-8,Shift-JIS,ISO-2022-JPUTF-16である.

*1 : 10進法だと「65」

インストール方法

Linux(Debian)

aptitudeでインストール可能であるので特に問題ない.

Windows

リンク先からプログラムをダウンロードし,適当なフォルダに置く.
そして,環境変数を設定すれば普通に利用可能である(コマンドプロンプト上で.).
使い方はLinuxのものと変わりない.

Shif-JISをEUC-JPに変換

次のようにたたく.
ushi@BigOwl:~$ nkf -eLu --overwrite filename
こうすると,filenemeにEUC-JP(eオプション)で行末がUNIX形式(Luオプション)の文字コードへ変換された結果が上書きされる.
万に一つくらいは失敗するかもしれないが,ファイル数は増えないので扱いは楽である.
なお,nkfは入力ファイルの文字コードを自動検出してくれるので,これ以上のオプションは必要ない.
(Shift-JIS以外に,UTF-8やISO-2022-JPであっても問題ないです.)
自動検出は普通は失敗しないが,可能性はゼロではないらしい.
もし,上書きせずに別のファイルに出力したければ,以下のようにすればいいと思う.
ushi@BigOwl:~$ nkf -eLu inputfilename > outputfilename

EUC-JPをShift-JISに変換

同様に
ushi@BigOwl:~$ nkf -sLw --overwrite filename

UTF-8に変換

同様に
ushi@BigOwl:~$ nkf -w8Lu --overwrite filename
で問題ないはず.
詳しくは,次のmanページをどうぞ.2種類の文字が欠けている可能性がありますが…….
nkf-ja.pdf