nkf(1) (Network Kanji code conversion Filter version 1.7) を ruby から使うためのモジュールです。
ruby 1.8.2 以降では nkf Network Kanji Filter の 2.0 以降が取り込まれています。 (ruby 1.8.2 feature)
以下は、漢字コード変換コマンドの例です。
#!/usr/local/bin/ruby require 'nkf' opt = '' opt = ARGV.shift if ARGV[0][0] == ?- while line = ARGF.gets print NKF.nkf(opt, line) end
以下は、漢字コード判別コマンドの例です。 (1.8.2 以降の NKF.guess では、以下の5種類以外の値になる可能性があります trap::NKF)
#!/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 モジュールのモジュール定数です(下記参照)。 ruby 1.8.2 より前は現在の NKF.guess1 と同じものです。 ruby 1.8.2 以降では NKF.guess2 と同じものです。
NKF.guess1(str)
Ruby1.8.1以前のNKF.guessと同じものです。
NKF.guess2(str)
nkf2の漢字コード自動判定ルーチンを利用したものです。
NKF::JIS
JISコードを表します。
NKF::EUC
EUCコードを表します。
NKF::SJIS
SJISコードを表します。
NKF::BINARY
入力が binary であることを表します。
NKF::UNKNOWN
コード判定に失敗したことを表します。
NKF::ASCII
ASCIIコードを表します。
NKF::UTF8
UTF-8コードを表します。
NKF::UTF16
UTF-16コードを表します。
NKF2.0.5相当です。
b,u Output is buffered (DEFAULT),Output is unbuffered j,s,e,w Outout code is JIS 7 bit (DEFAULT), Shift JIS, AT&T JIS (EUC), UTF-8 After 'w' you can add more options. (80?|16((B|L)0?)?) J,S,E,W Input assumption is JIS 7 bit , Shift JIS, AT&T JIS (EUC), UTF-8 After 'W' you can add more options. (8|16(B|L)?) t no conversion i_/o_ Output sequence to designate JIS-kanji/ASCII (DEFAULT B) r {de/en}crypt ROT13/47 h 1 hirakana->katakana, 2 katakana->hirakana,3 both m[BQN0] MIME decode [B:base64,Q:quoted,N:non-strict,0:no decode] M[BQ] MIME encode [B:base64 Q:quoted] l ISO8859-1 (Latin-1) support f/F Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl Z[0-3] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces, 3: Convert HTML Entity X,x Assume X0201 kana in MS-Kanji, -x preserves X0201 B[0-2] Broken input 0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL T Text mode output d,c Delete \r in line feed and \032, Add \r in line feed I Convert non ISO-2022-JP charactor to GETA -L[uwm] line mode u:LF w:CRLF m:CR (DEFAULT noconversion) long name options --fj,--unix,--mac,--windows convert for the system --jis,--euc,--sjis,--utf8,--utf16,--mime,--base64 convert for the code --hiragana, --katakana Hiragana/Katakana Conversion --cap-input, --url-input Convert hex after ':' or '' --numchar-input Convert Unicode Character Reference --no-cp932 Don't convert Shift_JIS FAxx-FCxx to equivalnet CP932 --cp932inv convert Shift_JIS EDxx-EFxx to equivalnet CP932 FAxx-FCxx --ms-ucs-map Microsoft UCS Mapping Compatible
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 では無意味なオプションもあるかもしれません