模块 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

将全角 >、<、”、& 替换为 ‘&gt;’、‘&lt;’、‘&quot;’、‘&amp;’,如同 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)

又名 AT&T JIS, Japanese EUC, UJIS

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 的完整版本字符串

公共类方法

guess(str) → encoding click to toggle source

返回 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()));
}
nkf(opt, str) → string click to toggle source

转换 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;
}