模組 NKF

NKF - 網路漢字過濾器的 Ruby 擴充套件

說明

這是 nkf(網路漢字過濾器)的 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} 加密/解密 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]]

在行中以 n 邊距對 m 長度進行折疊。在沒有這個選項的情況下,折疊長度為 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

假設 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=輸入編碼 –oc=輸出編碼

Set 輸入或輸出編碼。 NKF 支援下列編碼,且這些編碼名稱不區分大小寫。

ISO-2022-JP

又稱 RFC1468、7 位元 JIS、JUNET

EUC-JP (eucJP-nkf)

又稱 AT&T JIS、日文 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

NKD 的 UTF-8,又稱 UTF8-NFD (僅輸入)

–fb-{skip, html, xml, perl, java, subchar}

指定 nkf 處理未指派字元的模式。未指定此選項時,預設為 –fb-skip。

–prefix= 跳脫字元 目標字元 ..

當 nkf 轉換為 Shift_JIS 時,nkf 會將指定的跳脫字元加入指定的 Shift_JIS 字元的第 2 個位元組。引數的第一個位元組是跳脫字元,後面的位元組是目標字元。

–no-cp932ext

將 CP932 中延伸的字元視為未指派字元。

–no-best-fit-chars

當 Unicode 轉換為編碼位元組時,不要轉換非來回安全的字元。當 Unicode 轉換為 Unicode 時,使用此選項和 -x 選項,nkf 可用作 UTF 轉換器。(換句話說,沒有此選項和 -x 選項,nkf 就不會儲存一些字元)

當 nkf 轉換與路徑相關的字串時,您應該使用此選項。

–cap-input

解碼十六進位編碼字元。

–url-input

取消百分比轉譯字元。

忽略其餘的 - 選項。

常數

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 按一下以切換來源

傳回 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 按一下以切換來源

轉換 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;
}