NKF

该模块为在ruby中使用nkf(1)(Network Kanji code conversion Filter version 1.7)提供支持.

用法:

下面是汉字代码转换命令的例子。

#!/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.guess1。

ruby 1.9 特性

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

表示编码识别失败。

ruby 1.9 特性

NKF::ASCII

表示ASCII编码。

NKF::UTF-8

表示UTF-8编码。

NKF::UTF-16

表示UTF-16编码。

选项字符串

对应于NKF1.7

可用的选项如下. 您可以将多个选项连在一起,如-mu。

-b   缓冲输出。(默认)
-u   输出时,不使用缓冲。
-t   不作任何动作。

-j   输出JIS编码。(默认)
-e   输出EUC编码。
-s   输出shift JIS编码。

-i?  使用ESC-'$'-?来表示JIS汉字顺序。
     (默认为ESC-'$'-'B')
-o?  使用ESC-'('-?来表示1字节的英文字母和数字
     的顺序。(默认は、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的1字节假名、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并用)

ruby 1.9 特性

对应于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