模組 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
-
將全形 >, <, “, & 替換為 ‘>’, ‘<’, ‘"’, ‘&’ 如同 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)
- 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 的完整版本字串
公用類別方法
傳回 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; }