nkf(1)[外部] (Network Kanji code conversion Filter version 1.7)を ruby から使うためのモジュールです。
以下は、漢字コード変換コマンドの例です。
#!/usr/local/bin/ruby require 'nkf' opt = '' opt = ARGV.shift if ARGV[0][0] == ?- while line = ARGF.gets print NKF.nkf(opt, line) end
以下は、漢字コード判別コマンドの例です。
#!/usr/local/bin/ruby
require 'nkf'
CODES = {
NKF::JIS => "JIS",
NKF::EUC => "EUC",
NKF::SJIS => "SJIS",
NKF::BINARY => "BINARY",
NKF::UNKNOWN => "UNKNOWN(ASCII)",
}
while file = ARGV.shift
str = open(file) {|io| io.gets(nil) }
printf "%-10s ", file
if str.nil?
puts "EMPTY"
else
puts CODES.fetch NKF::guess(str)
end
end
NKF.nkf(opt, str)文字列 str の文字コードを変換し、変換結果の文字列を返します。
opt には、
nkf(1)[外部]
と同じコマンドラインオプションを指定します(後述)。複数指定する場合は、
NKF.nkf('-Se', str) や NKF.nkf('-S -e', str) などとし
ます。optは、必ず '-' で始めなければいけないことに注意
してください
このメソッドは(nkf コマンドがそうであるように)、MIME Base64 の デコード処理がデフォルトでオンになっています。この動作を無効にしたけ れば opt に '-m0' を含めるようにしてください。
NKF.guess(str)文字列 str の漢字コードを判別して返します。 返される値は、NKF モジュールのモジュール定数です(下記参照)。
NKF::JISJISコードを表します。
NKF::EUCEUCコードを表します。
NKF::SJISSJISコードを表します。
NKF::BINARY入力が binary であることを表します。
NKF::UNKNOWNコード判定に失敗したことを表します。 入力が ASCII 文字列でもこの値になります。
NKF1.7相当です*1。
指定できるオプションは、以下の通り。-mu のように続けることができる。
-b バッファリング出力を行う。(デフォルト)
-u 出力時に、バッファリングしない。
-t 何もしない。
-j JISコードを出力する。(デフォルト)
-e EUCコードを出力する。
-s シフトJISコードを出力する。
-i? JIS漢字を指示するシーケンスとして ESC-'$'-?を使用する。
(デフォルトは、ESC-'$'-'B')
-o? 1バイト英数文字セットを指示するシーケンスとして、ESC-
'('-?を使用する。(デフォルトは、ESC-'('-'B')
-r ROT13/47の変換をする。
-v バージョンを表示する。
-T テキストモードで出力する。(MS-DOS上でのみ効力を持つ)
-m MIME を解読する。(defalut on)
ISO-2022-JP(base64)とISO-8859-1(Q encode)のみを解読する。
ISO-8859-1 (Latin-1) を解読する時は、-lフラグも必要である。
-mB MIME base64 stream を解読する。ヘッダなどは取り除くこと。
-mQ MIME quoted stream を解読する。
-m0 MIME を解読しない。
-l 0x80-0xfeのコードをISO-8859-1 (Latin-1)として扱う。
JISコードアウトプットとの組合せみのみ有効。
-s, -e, -xとは両立しない。
-f? 一行?文字になるように簡単な整形をおこなう。デフォルトは60文字である。
-Z X0208中の英数字と若干の記号をASCIIに変換する。
-Z1 はX0208間隔をASCII spaceに変換する。
-Z2 はX0208間隔をASCII space 二つに変換する。
-J -E -S -X -B
期待される入力コードの性質を指定する。
-J ISO-2022-JPを仮定する。
-E 日本語EUC(AT&T)を仮定する。
-S MS漢字を仮定する。X0201仮名も仮定される。
-X MS漢字中にX0201仮名があると仮定する。
-B 壊れた(Broken)JISコード。ESCがなくなったと仮定する。
-B1 ESC-(, ESC-$ のあとのコードを問わない
-B2 改行のあとに強制的にASCIIに戻す
-x 通常おこなわれるX0201仮名->X0208の仮名変換をしないで、X0201仮名を保存する。
入力は、MS-Kanjiの1byte仮名、SO/SI、ESC-(-I, SSOを受け付ける。
出力は、日本語EUC中ではSSO、JISでは ESC-'('-I を使う。
-O ファイル out_file に出力が保存されます。
ファイル名が指定されていない場合は、'nkf.out'又は'wnkf.out'に出力する。
-c 行末にCRコード(0D)を追加(拡張機能 -T と併用不可)
-d 行末からCRコード(0D)を削除(拡張機能 -T と併用不可)
*1中には、ruby では無意味なオプションもあるかもしれません