qkcというプ ログラムがあります。基本的にはnkfで済む話なのです が、インターフェイスが気に入ってよく使っていました。しかし、qkcには大 きな欠点があります。それはUTF-8に対応してないこと。
というわけでUTF-8対応版を作ろうと思い立ったのですが、perlで書けば一 瞬でできあがるものを、何を考えたかrubyを使って書こうと思ってしまいまし た……。
make, make installして、nkc -h を実行してください。以下のような usageが出るはずです。
$ nkc -h usage: nkc [-e|-j|-s|-w] [any options] file1 file2 file3.... -e convert to EUC-JP -j convert to ISO-2022-JP(JIS) -s convert to Shift_JIS -w convert to UTF-8 -m convert to CR+LF(DOS) newline code -u convert to LF(UNIX) newline code -M convert to CR(MAC) newline code --help show this message.
nkcは引数に与えられたファイルを直接書き換えてしまいますので、注意し てください。
著作権は放棄します。Public Domain として扱ってください。また、完全 に無保証です。何があっても作者は責任を取りません。
まず、現在(2004年7月)のrubyで絶望的なのは、NKFがUTF-8に対応してない ということです。iconvのラッパーはあるのですが、これは入力文字コードと 出力文字コードをきちんと指定してやらなければなりません。つまり、まず入 力文字コードが何であるかを別途把握する必要があるのです。
しょうがないので、 日本語文字コードの判別というページや、perlのJcode.pmのソースを参考 に、自前で判別ルーチンを書いてみました。添付のlibncode.rbがそれです。
require 'libncode.rb' code = Ncode::ncode(str)とやってやれば、strに入ってる文字列の文字コードが何か、codeに入るはず です。
なにせrubyを使うのはホントに初めてですし、文字コードについて勉強し たもの今回が初めてみたいなものですので、精度は悪いかもしれません。とり あえず手元のテキストファイルを数百個試してみましたが、誤検出したものは ありませんでした。でも半角カナとかだけで構成されたものとかはほぼ間違い なく化けると思います。
しかし、昨今blogなどの潮流でUTF-8を使う機会は増えてると思うのですが、 世のruby使いたちはどうやってUTF-8を判別してるんでしょうね……。
当り前ですが、こんなものperlならすぐ作れます。Encode/Decodeがありま すし、文字コードの判別もやってもらえます。シェルスクリプトでもUTF-8対 応のnkfがあるのでけっこうすぐ作れちゃうでしょうね。rubyなんぞで書こう と思った自分はマゾっ気があるのか、それとも暇人なのか……
どれもいつになったらやるのかは知りません。