模块 NKF
NKF
- Network Kanji Filter 的 Ruby 扩展
描述¶ ↑
这是一个 nkf (Network Kanji Filter) 的 Ruby 扩展版本。它转换第一个参数并返回转换后的结果。转换细节由作为第一个参数的标志指定。
Nkf 是网络、主机和终端之间另一种汉字代码转换器。它将输入汉字代码转换为指定的汉字代码,例如 ISO-2022-JP、Shift_JIS、EUC-JP、UTF-8 或 UTF-16。
nkf 最独特的特性之一是它可以猜测输入汉字编码。它目前识别 ISO-2022-JP、Shift_JIS、EUC-JP、UTF-8 和 UTF-16。因此用户无需显式设置输入汉字代码。
默认情况下,X0201 平假名会被转换为 X0208 平假名。对于 X0201 平假名,支持 SO/SI、SSO 和 ESC-(-I 方法。对于自动代码检测,nkf 假设 Shift_JIS 中没有 X0201 平假名。要接受 Shift_JIS 中的 X0201,请使用 **-X**、**-x** 或 **-S**。
标志¶ ↑
-b -u¶ ↑
输出被缓冲(默认),输出不被缓冲。
-j -s -e -w -w16 -w32¶ ↑
输出代码为 ISO-2022-JP (7 位 JIS
)、Shift_JIS、EUC-JP、UTF-8N、UTF-16BE、UTF-32BE。如果没有此选项和编译选项,则假定为 ISO-2022-JP。
-J -S -E -W -W16 -W32¶ ↑
输入假设为 JIS
7 位、Shift_JIS、EUC-JP、UTF-8、UTF-16、UTF-32。
-J¶ ↑
假设 JIS
输入。它也接受 EUC-JP。这是默认值。此标志不排除 Shift_JIS。
-S¶ ↑
假设 Shift_JIS 和 X0201 平假名输入。它也接受 JIS
。EUC-JP 被识别为 X0201 平假名。如果没有 **-x** 标志,X0201 平假名(半角平假名)将被转换为 X0208。
-E¶ ↑
假设 EUC-JP 输入。它也接受 JIS
。与 -J 相同。
-t¶ ↑
不进行转换。
-i_¶ ↑
用于指定 JIS-kanji 的输出序列。(默认 B)
-o_¶ ↑
用于指定 ASCII
的输出序列。(默认 B)
-r¶ ↑
{de/en}crypt ROT13/47
-h[123] –hiragana –katakana –katakana-hiragana¶ ↑
- -h1 –hiragana
-
片假名转换为平假名。
- -h2 –katakana
-
平假名转换为片假名。
- -h3 –katakana-hiragana
-
片假名转换为平假名,平假名转换为片假名。
-T¶ ↑
文本模式输出 (MS-DOS)
-l¶ ↑
ISO8859-1 (Latin-1) 支持
-f[m
[- n
]]¶ ↑
在 m
长度上折叠,每行 n
个字符的边距。如果没有此选项,折叠长度为 60,折叠边距为 10。
-F¶ ↑
保留换行符的折叠。
-Z[0-3]¶ ↑
将 X0208 字母表(全角字母)转换为 ASCII
。
- -Z -Z0
-
将 X0208 字母表转换为
ASCII
。 - -Z1
-
将 X0208 括号转换为单个
ASCII
空格。 - -Z2
-
将 X0208 括号转换为双
ASCII
空格。 - -Z3
-
将全角 >、<、”、& 替换为 ‘>’、‘<’、‘"’、‘&’,如 HTML 中一样。
-X -x¶ ↑
假设 MS-Kanji 中的 X0201 假名。使用 -X 或不使用此选项,X0201 将转换为 X0208 假名。使用 -x,尝试保留 X0208 假名,并且不将 X0201 假名转换为 X0208。在 JIS
输出中,使用 ESC-(-I。在 EUC
输出中,使用 SSO。
-B[0-2]¶ ↑
假设损坏的 JIS-Kanji 输入,其中丢失了 ESC。当您的站点使用旧的 B-News Nihongo 补丁时很有用。
- -B1
-
允许 ESC-( 或 ESC-$ 后的任何字符。
- -B2
-
强制在 NL 后使用
ASCII
。
-I¶ ↑
将非 iso-2022-jp 字符替换为 geta 字符(日语中的替代字符)。
-d -c¶ ↑
删除换行符中的 r,在换行符中添加 r。
-m[BQN0]¶ ↑
MIME ISO-2022-JP/ISO8859-1 解码。(默认)要查看 ISO8859-1 (Latin-1),需要 -l。
- -mB
-
解码 MIME base64 编码的流。删除转换前的标头或其他部分。
转换。
- -mQ
-
解码 MIME 引用的流。引用流中的 ‘_’ 转换为空格。
- -mN
-
非严格解码。
它允许在 base64 编码中间换行。
- -m0
-
不进行 MIME 解码。
-M¶ ↑
MIME 编码。标题样式。所有 ASCII
代码和控制字符保持不变。在编码之前执行汉字转换,因此不能用作图片编码器。
- -MB
-
MIME 编码
Base64
流。 - -MQ
-
执行引号编码。
-l¶ ↑
输入和输出代码为 ISO8859-1 (Latin-1) 和 ISO-2022-JP。-s、-e 和 -x 与此选项不兼容。
-L[uwm]¶ ↑
换行模式。没有此选项,nkf 不会转换换行符。
- -Lu
-
unix (LF)
- -Lw
-
windows (CRLF)
- -Lm
-
mac (CR)
–fj –unix –mac –msdos –windows¶ ↑
为这些系统转换
–jis –euc –sjis –mime –base64¶ ↑
为命名代码转换
–jis-input –euc-input –sjis-input –mime-input –base64-input¶ ↑
假设输入系统
–ic=input codeset
–oc=output codeset
¶ ↑
Set
输入或输出代码集。 NKF
支持以下代码集,并且这些代码集名称不区分大小写。
- ISO-2022-JP
-
又名 RFC1468,7bit
JIS
,JUNET - EUC-JP (eucJP-nkf)
- eucJP-ascii
-
又名 x-eucjp-open-19970715-ascii
- eucJP-ms
-
又名 x-eucjp-open-19970715-ms
- CP51932
-
Microsoft 版本的 EUC-JP。
- Shift_JIS
-
SJIS
,MS-Kanji - Windows-31J
-
又名 CP932
- UTF-8
-
与 UTF-8N 相同
- UTF-8N
-
没有 BOM 的 UTF-8
- UTF-8-BOM
-
带有 BOM 的 UTF-8
- UTF-16
-
与 UTF-16BE 相同
- UTF-16BE
-
没有 BOM 的 UTF-16 大端
- UTF-16BE-BOM
-
带有 BOM 的 UTF-16 大端
- UTF-16LE
-
没有 BOM 的 UTF-16 小端
- UTF-16LE-BOM
-
带有 BOM 的 UTF-16 小端
- UTF-32
-
与 UTF-32BE 相同
- UTF-32BE
-
无 BOM 的 UTF-32 大端序
- UTF-32BE-BOM
-
带 BOM 的 UTF-32 大端序
- UTF-32LE
-
无 BOM 的 UTF-32 小端序
- UTF-32LE-BOM
-
带 BOM 的 UTF-32 小端序
- UTF8-MAC
-
NKDed UTF-8,也称为 UTF8-NFD(仅输入)
–fb-{skip, html, xml, perl, java, subchar}¶ ↑
指定 nkf 处理未分配字符的方式。如果没有此选项,则假定为 –fb-skip。
–prefix= 转义字符
目标字符
..¶ ↑
当 nkf 转换为 Shift_JIS 时,nkf 会将指定的转义字符添加到指定的 Shift_JIS 字符的第二个字节。参数的第一个字节是转义字符,后面的字节是目标字符。
–no-cp932ext¶ ↑
将 CP932 中扩展的字符视为未分配字符。
–no-best-fit-chars¶ ↑
在 Unicode 到编码字节的转换中,不转换非往返安全的字符。在 Unicode 到 Unicode 的转换中,使用此选项和 -x 选项,nkf 可以用作 UTF 转换器。(换句话说,如果没有此选项和 -x 选项,nkf 不会保存某些字符)
当 nkf 转换与路径相关的字符串时,您应该使用此选项。
–cap-input¶ ↑
解码十六进制编码的字符。
–url-input¶ ↑
取消转义百分比转义的字符。
–¶ ↑
忽略 -option 的其余部分。
常量
- ASCII
- AUTO
- BINARY
- EUC
- GEM_VERSION
nkf 库的版本
- JIS
- NKF_RELEASE_DATE
nkf 的发布日期
- NKF_VERSION
nkf 的版本
- NOCONV
- SJIS
- UNKNOWN
- UTF16
- UTF32
- UTF8
- VERSION
nkf 的完整版本字符串
公共类方法
返回 nkf 例程猜测的 str 的编码。
static VALUE rb_nkf_guess(VALUE obj, VALUE src) { reinit(); input_ctr = 0; input = (unsigned char *)StringValuePtr(src); i_len = RSTRING_LENINT(src); guess_f = TRUE; kanji_convert( NULL ); guess_f = FALSE; return rb_enc_from_encoding(rb_nkf_enc_get(get_guessed_code())); }
转换 str 并返回转换后的结果。转换细节由 opt 指定为 String
。
require 'nkf' output = NKF.nkf("-s", input)
static VALUE rb_nkf_convert(VALUE obj, VALUE opt, VALUE src) { VALUE tmp; reinit(); nkf_split_options(StringValueCStr(opt)); if (!output_encoding) rb_raise(rb_eArgError, "no output encoding given"); switch (nkf_enc_to_index(output_encoding)) { case UTF_8_BOM: output_encoding = nkf_enc_from_index(UTF_8); break; case UTF_16BE_BOM: output_encoding = nkf_enc_from_index(UTF_16BE); break; case UTF_16LE_BOM: output_encoding = nkf_enc_from_index(UTF_16LE); break; case UTF_32BE_BOM: output_encoding = nkf_enc_from_index(UTF_32BE); break; case UTF_32LE_BOM: output_encoding = nkf_enc_from_index(UTF_32LE); break; } output_bom_f = FALSE; incsize = INCSIZE; input_ctr = 0; input = (unsigned char *)StringValuePtr(src); i_len = RSTRING_LENINT(src); tmp = rb_str_new(0, i_len*3 + 10); output_ctr = 0; output = (unsigned char *)RSTRING_PTR(tmp); o_len = RSTRING_LENINT(tmp); *output = '\0'; /* use _result_ begin*/ result = tmp; kanji_convert(NULL); result = Qnil; /* use _result_ end */ rb_str_set_len(tmp, output_ctr); if (mimeout_f) rb_enc_associate(tmp, rb_usascii_encoding()); else rb_enc_associate(tmp, rb_nkf_enc_get(nkf_enc_name(output_encoding))); return tmp; }