模块 NKF
NKF
- Ruby 扩展用于网络日语过滤器
描述¶ ↑
这是一个 Ruby 扩展版本的 nkf(网络日语过滤器)。它转换第一个参数并返回转换后的结果。转换细节由作为第一个参数的标志指定。
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¶ ↑
假设 X0201 假名在 MS-Kanji 中。使用 -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
¶ ↑
设置输入或输出代码集。 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= escape character
target character
..¶ ↑
当 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; }