# NKF

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)`

  ruby 1.8.2 feature

  Ruby1.8.1以前のNKF.guessと同じものです。

`NKF.guess2(str)`

  ruby 1.8.2 feature

  nkf2の漢字コード自動判定ルーチンを利用したものです。

## 定数:

`NKF::JIS`

  JISコードを表します。

`NKF::EUC`

  EUCコードを表します。

`NKF::SJIS`

  SJISコードを表します。

`NKF::BINARY`

  入力が binary であることを表します。

`NKF::UNKNOWN`

  コード判定に失敗したことを表します。

`NKF::ASCII`

  ruby 1.8.2 feature

  ASCIIコードを表します。

`NKF::UTF8`

  ruby 1.8.2 feature

  UTF-8コードを表します。

`NKF::UTF16`

  ruby 1.8.2 feature

  UTF-16コードを表します。

## オプション文字列

### ruby 1.8.2 以降

ruby 1.8.2 feature

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

### ruby 1.8.2 より前のバージョン

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 では無意味なオプションもあるかもしれません

links: [NKF] [ruby 1.8.2 feature] [trap::NKF]
reverse links: [FAQ::日本語の取り扱い] [Kconv] [Mail] [base64.rb] [nkf.so] [ruby 1.6 feature] [trap::NKF] [添付ライブラリ]