该模块为在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