NKF(1) NKF(1) NAME nkf - ネットワーク用漢字コード変換フィルタ v2.0.6 SYNOPSIS nkf [options] [file] DESCRIPTION nkfは ネットワークでメールやニュースの読み書きをするために 作られた、漢字コードの変換フィルタである。 このnkfの特徴としては、入力漢字コード系の統計的な自動認 識 機能がある。このため、利用者は、入力漢字コード系が何である かを知らなくても、出力漢字コード系のみ指定すれば良いことに なる。ただ、この判定機構は、理論的には完全ではないが、通常 のニュースやメールのメッセージについては確実に動作する安全 なものにはなっている。 現在、nkfが認識できる入力の漢字コード系は、いわゆる「JISコ ード」(ISO- 2022-JPに基づく も の)、MS漢 字 コ ー ド(シ フ トJIS)、 日本語EUC(AT&Tコード)、 UTF-8、UTF-16のいずれかで ある。出力する漢字コード系も、これらである。 入力は、ファイルを指定しなければ、標準入力となる。出力は標 準出力である。 指定できるオプションは、以下の通り。-mu のように続けること ができる。 -j JISコードを出力する。(デフォルト) -e EUCコードを出力する。 -s シフトJISコードを出力する。 -w -w8[0] -w16[BL][0] Unicode を出力する。 -w -w80 UTF8コードを出力する。(BOM無し) -w8 UTF8コードを出力する。 -w16 -w16B0 UTF16コードを出力する。(Big Endian / BOM無 し) -w16B UTF16コ ードを出力する。(Big Endian / BOM有 り) -w16L UTF16コードを出力す る。 (Little Endian / BOM有り) -w16L0 UTF16コ ー ド を 出力する。(Little Endian / BOM無し) 01/Apr/2006 1 NKF(1) NKF(1) -m[BQSN0] MIME を 解 読 す る。(デ フォ ル ト) ISO-2022-JP(base64)とISO-8859-1(Q encode) のみを解 読する。ISO-8859-1 (Latin-1) を解読する時は、 -lフ ラ グ も 必要である。-m0 ではMIMEを解読しない。-mQ, -mBでは、 Q encode, B encode されているものとして処 理する。 -mB MIME base64 stream を解読する。ヘッダなどは 取り除くこと。 -mQ MIME quoted stream を解読する。 -mS MIME のチェックを厳しくする (デフォルト) -mN MIME のチェックを緩くする -m0 MIME を解読しない。 -mS は、宣言の内容と、その後に続くbase64の整合性 を チェックする。 -mN は、改行で切られたMIMEなども解読 する。解読が止まらないこともある。 -M[BQ] MIME に変換する。JISにコード変換してからbase64さ れ る。 -M ヘッダ形式に変換する -MB base64 stream に変換する -MQ Quoted stream に変換する -J -E -S -X -B 期待される入力コードの性質を指定する。 -J ISO-2022-JPを仮定する。 -E 日本語EUC(AT&T)を仮定する。 -S MS漢字を仮定する。X0201仮名も仮定される。 -W UTF-8を仮定する。 -W8 UTF-8を仮定する。 -W16 UTF-16(Little Endien)を仮定する。 -W16B UTF-16(Big Endien)を仮定する。 -W16L UTF-16(Little Endien)を仮定する。 -X MS漢字中にX0201仮名があると仮定する。 -B 壊れた(Broken)JISコード。ESCがなくなったと仮 定する。 -B1 ESC-(, ESC-$ のあとのコードを問わな い -B2 改行のあとに強制的にASCIIの戻す -f? 一行?文字になるように簡単な整形をおこなう。デフォル トは 60文字である。 01/Apr/2006 2 NKF(1) NKF(1) -Z X0208中の英数字と若干の記号をASCIIに変換 す る。-Z1 はX0208間 隔をASCII spaceに変換する。-Z2はX0208間隔 をASCII space 二つに変換する。趣味によって使い分 け てほしい。 -b バッファリング出力を行う。(デフォルト) -u 出 力 時 に、バッファリングしない。 ssh localhost | nkf -u というように使う。 -t 何もしない。 -I iso-2022-jp以外の漢字コードを〓に変換。 -i? JIS漢字を指示するシーケンスとして ESC-'$'-?を使用す る。 (デフォルトは、ESC-'$'-'B') -o? 1バ イ ト 英 数 文 字セットを指示するシーケンスとし て、ESC-'('-?を 使 用 す る。 (デ フォ ル ト は、ESC-'('-'B') -r ROT13/47の変換をする。 -g 自動判別の結果を出力します。 -v バージョンを表示する。 -T テ キ ストモードで出力する。(MS-DOS上でのみ効力を持 つ) -l 0x80-0xfeのコードをISO-8859-1 (Latin-1)として扱う。 JISコードアウトプットとの組合せみのみ有効。 -s, -e, -xとは両立しない。 -x 通常おこなわれるX0201仮名->X0208の仮名変換をしな い で、 X0201仮 名 を 保 存する。入力は、MS-Kanjiの1byte仮 名、SO/SI、 ESC-(-I, SSOを受け付ける。出力は、日 本 語EUC中ではSSO、 JISでは ESC-'('-I を使う。 -O ファ イ ル に 出 力 す る。Unixで は 不 要 な機能だ がWindowsやMSDOSでは必要らしい。直後の引き 数 で な く、 最後のファイル名が出力ファイル名となり上書きさ れてしまうので注意。ファイル 名 が な い 場 合 は、 nkf.out。 -c NL前にCRを付加する。 -d NL前 のCRを 削 除する。単独のCRは、NLに置き換えられ る。 -L[wmu] 改行モード -Lu unix (LF) 01/Apr/2006 3 NKF(1) NKF(1) -Lw windows (CRLF) -Lm mac (CR) デフォルトは変換なし。 -- 長い名前のオプション。 --ic= --oc= 入力・出力の漢字コード系を指定します。 ISO-2022-JP JISコード。-jまたは-Jと同じ。 EUC-JP EUCコード。-eまたは-Eと同じ。 eucJP-ascii オープングループ日本ベンダ協議会が定 義したeucJP-ascii。 -xが暗黙のうちに 指定される。 eucJP-ms オープングループ日本ベンダ協議会が定 義 したeuc-JPms。 -xが暗黙のうちに指 定される。 CP51932 Micorosft Code Page 51932。-xが暗 黙 のうちに指定される。 Shift_JIS シフトJIS。-sまたは-Sと同じ。 CP932 Micorosft Code Page 932。-xが暗黙の うちに指定される。 UTF-8 UTF-8N BOM無しのUTF-8。-wまたは-Wと同じ。 UTF-8-BOM BOM付きのUTF-8。-w8または-Wと同じ。 UTF8-MAC UTF8-MAC。互換分解されたひらがな・カ タカナ等を結合します。 UTF-16 UTF-16BE-BOM BOM 有 り で Big Endian の UTF-16。 -w16Bまたは-W16Bと同じ。 UTF-16BE BOM 無しで Big Endian の UTF-16。 -w16B0または-W16Bと同じ。 UTF-16LE-BOM BOM 有りで Little Endian の UTF-16。 -w16Lまたは-W16Lと同じ。 UTF-16LE BOM 無しで Little Endian の UTF-16。 -w16L0または-W16Lと同じ。 --fj,--unix,--mac,--msdos, --windows これらのシステムに適した変換をします。 --jis,--euc,--sjis,--mime,--base64 対応する変換をします。 --hirakana, --katakana 平仮名、片仮名変換 01/Apr/2006 4 NKF(1) NKF(1) --fb-{skip, html, xml, perl, java, subchar} Unicode から Shift_JIS, EUC-JP, ISO-2022-JP に変換する際に、変換できなかった文字をどう扱 うかを指定できます。 --prefix=escape character target character.. EUC-JP から Shift_JIS への変換の際、2 バイト 目に現れた文字の前にエスケープ文字をつけるこ と ができます。引数の 1 文字目がエスケープ文 字、2文字目以降にエスケープされるべき文字 を 指定します。 例えば、 --prefix= とすると、Shift_JIS の 2 文字目に $, @ が来たら、その前に が挿 入 さ れ ま す --prefix=@@ とすると、Shift_JIS の 2 文字目 に @ が来たら、その前に @ が挿入されます --no-cp932ext CP932において拡張された、 NEC特殊文字、NEC選 定IBM拡張文字(89〜92区)、IBM拡張文字を変換し ません。 --no-best-fit-chars Unicode からの変換の際に、往復安全性が確保さ れ ない文字の変換を行いません。 Unicode から Unicode の変換の際に -x と共に指定す る と、 nkf を UTF 形式の変換に用いることができま す。(逆に言えば、これを指定しないと一部の文 字が保存されません) パスに関わる文字列を変換する際には、このオプ ションを指定することを強く推奨します。 --cap-input, --url-input それぞれ ':', '%' に続く 16 進数を文字に変換 する --numchar-input &#....; のような、Unicode文字参照を変換する --in-place[=SUFFIX] --overwrite[=SUFFIX] 元 の ファイルを変換結果で置き換える。複数の ファイルを書き換えることも可能。元のファイル の タ イムスタンプとパーミッションが保持され る。現在、作成日時やinodeは変更されるが、 将 来にわたってこの実装のままである保証は無い。 --guess 自動判別の結果を出力する --help 01/Apr/2006 5 NKF(1) NKF(1) --version -- これ以降のオプションを無視する 次の 2 つは、config.h で EXEC_IO を define してコンパイル した時の み有効 --exec-in nkf [options] --exec-in cmd args... と や る と、cmd の出力を nkf の入力とする --exec-out nkf [options] --exec-out cmd args... とやる と、nkf の出力を cmd の入力とする AUTHOR 市川 至 ichikawa@flab.fujitsu.co.jp (was ichikawa@fujitsu.JUNET) 河野 真治 kono@ie.u-ryukyu.acjp Rei FURUKAWA furukawa@tcp-ip.or.jp BUGS 実は、入力のコード系の判定は、EUCとシフトJISとの自動判定で あり、最初に特定できる文字が来た時点で確定してしまう。そし て、特定不能の間は保留バッファにためておかれ、確定後に処理 される。このため、 1) 7ビッ トJISは常に認識される。シフトJIS、EUC混合もほ とんどの場合は問題がない。ただし、 2) シフトJISのX0201仮名とEUCが識別できない。し た がっ て、 デフォルトではシフトJISのX0201仮名はないと仮定 している。 このフィルタの変換は、コード系に対応した一括写像を施すだけ な ので、外字や特殊記号や罫線素片など、JIS第一、第二水準表 において定義されていないコードに各社により割り当てられた文 字 変換しない。第三水準なども変換しない。 UTF8の日本語以外 の部分にも対応していない。 HISTORY kono@csl.sony.co.jp (Shinji Kono) による変更。 X0201仮名(いわゆる半角かな)はデフォルトでX0208(全角仮名)に 変 換 さ れ る。ただし、シフトJISのX0201仮名はデフォルトで はEUCだと解釈されてしまう。これが望ましくない時には -S や - -X などのフラグを使えば良い。-Xを指定すると一旦確定した シフトJISから EUCに移行するこ と は な い。ESC-(-Iに よ る X0201は常に認識される。SI/SO SSOは、-lが指定されていなけれ ばX0201と解釈する。 MIME decodeは、ISO-2022-JPのbase64と、ISO-8859-1の16進encodeの み decodeする。 MIME decodeは、単純な改行や空白は安全に 読 01/Apr/2006 6 NKF(1) NKF(1) み飛ばされる。ということは、 MIME decode中の空白は保存され ない。変換は可逆ではない。 lessやrnで行が分割された時 は、 Terminalに よって異なる ESC-[-K などが挿入されるので、完全 にはdecode できない。-mN では、チェックが緩いので decodeで きる場合もある。 ISO-8859-1 出力はJIS コード出力としか両立 しない。 Fold 機能はfmtと異なり行頭の空白を無視する。禁則処理はある が 指定された長さ+10で強制改行する。-f60-10 などとすると強 制改行の余地(fold-margin) を調整できる。-f40-0とすると禁則 処理なしとなる。 X0201仮名はrot47されない。 nkf 1.6 kono@ie.u-ryukyu.ac.jp (Shinji Kono) による変更。 -B のlevelを0,1,2 に増やした。MIMEのbase64, Q-Encodingを 解読する機能を付けた。ヘッダなどは解読しないので、Encodeさ れ た部分だけを通す必要がある。 -mB は、nkf1.5と違う動きを するので、-B -m とすること。 nkf 1.6.1 -Z1 でX0208間隔->ASCII spaceの 変 換 を お こ な う。 -Z2 でX0208間隔->ASCII space 2個の変換をおこなう。 nkf 1.7 ESC-$-(-B などにも対応するようになった。 copy right の非営利の条件が不要になった。使用時の問い合わ せも不要。 Perl Extension として使えるようになった。 nkf 1.9 MIME エンコードの機能時でも、コード変換されしまう の で 注 意。 base64 エンコードでは改行時に先頭に空白が付くのでメー ルヘッダに使用できる。 コード変換モジュールは、サブルーチンを継続によって接続する 形式となった。複数の変換を自由に接続できるようになった。 getc <-- iconv --> oconv --> other conversion --> putc という形で、順に呼び出される。 長いオプション名を許すようになった。 --mac --jis 01/Apr/2006 7 NKF(1) NKF(1) --unix など。 UTF-8 サポートについて furukawa@tcp-ip.or.jp による。 従来の nkf と同様に、nkf -e として起動すると、自動判 別 で UTF-8 と判定されれば、そのまま euc-jp に変換される。 オプションで、文字コードを指定できる。 -w 出力を utf-8 に指定します -W 入力を utf-8 と仮定します 特に自動判別、コード混在、エラー処理系には判定を失敗するこ とがある。 -Z3 オプションの新設 X0208 の '>', '<', '”', '&' をそれぞれ '>', '<', '"', '&' に変換します nkf 2.0 newline を保存する folding -F。fmtに近い動作をする。 folding のマージン。-f60-0 などと、0にすると禁則せずに、強 制的にfoldingする。携帯にメールを送るときに使う。 nkf -f40-0 な ど と してメールを 40 文字づつ切り出して、 「Subject 160 文字目から 199 文字目まで」「本文 200 文 字目から 239 文字目まで」とする。 MIME関係 fixed mime mode ( -mQ ) で =? で Q-encode が抜けてしまうバ グの修正。 Q encode の Soft Wrap に対応。 MIME encode のWrapでは、先頭に一文字の空白挿入。した。 あA の MIME 変換は、A を含んで変換しないといけないが、対応して いない。RFCには反した動作だが、 encoded word 間 のwhite spaceは無視される。 nkf_test.pl では、MIMEの空白を削除して から比較している。 01/Apr/2006 8 NKF(1) NKF(1) non-strict mime -MN では、空白、改行を ま た い で、base64 encoding を解読する。これで、スクリーンからcut&pasteでデコ ードすることも可能。止まらない可能性あり。 その他 nkf_test.pl のバグチェックを増やした。 test が失敗したとき にdiffを取るようにした。 make_test.pl でテスト作成可能。 Perl moduleで、\0を 含 む文字列も変換できるようになった。 Perl XSでの文字列の長さの扱いを修正。 NKFをNKF.modにしたので、Mac OS X でMakeでコンパイル化。 rot13が1.9で動かなくなっていたのを修正。 -Z の間隔やおかしな変換の修正 hiragana/katakana 変換ができるようになりました。 -h1 --hiragana カタカナ->ひらがな -h2 --katakana ひらがな->カタカナ -h3 --katakana-hiragana カタカナ<->ひらがな --overwrite で、引数のファイルを直接、置き換えることができ ます。 nkf 2.0.4 Shift_JIS の FAxx-FCxx について、普通の式では euc に変換で きませんが、CP932 で同値な文字に読み換えて変換します。この 動作を無効にするには、--no-cp932 をつけてください。 perl module に nkf_continue オプション、自動判別の状態などを引き継 いで変換 inputcode 自動判別結果の文字コードを返すを追加し ました。 --numchar-input オプションを新設 mhonarc など、日本語を UTF-16 の &#....; のパターンで 出力するものを変換します。 --exec-in, --exec-out オプ ショ ン を 新 設 (config.h で EXEC_IO を define してコンパイルした時のみ有効) nkf -e --exec-in cmd args... 01/Apr/2006 9 NKF(1) NKF(1) とやると、cmd の出力を nkf の入力とします。 nkf -e --exec-out cmd args... とやると、nkf の出力を cmd の入力とします。 nkf 2.0.5 --cp932inv というオプションをつけると Shift_JIS への変換の 際、EDxx-EFxx については、 CP932 で同値な FAxx-FCxx の文字 に変換します。 --guess または -g というオプションをつけると自動判別の結果 を出力します。 --prefix= というオプ ショ ン を つ け る と、EUC-JP か ら Shift_JIS への変換の際、2 バイト目に現れた文字の前にエスケ ープ文字をつけることができます。引数の 1 文字目がエスケ ー プ 文 字、2文 字目以降にエスケープされるべき文字を指定しま す。 例えば、 --prefix= とすると、Shift_JIS の 2 文字目に $, @ が 来 た ら、 そ の 前 に が 挿 入 さ れ ます --prefix=@@ とする と、Shift_JIS の 2 文字目に @ が来たら、その前に @ が挿 入 されます -w8, -w16B, -w16L, -W8, -W16B, -W16L というオプションを追 加しました。 --ms-ucs-map と い う オ プ ショ ン を 付 け る と、 MicrosoftのUCSマッピング互換の変換を行います。 nkf 2.0.6 ひらがなカタカナ変換のドキュメント ひらがなカタカナ変換のドキュメントが逆になっていたので、こ れを修正しました。正しいドキュメントは以下の通りです。 -h1 --hiragana カタカナ->ひらがな -h2 --katakana ひらがな->カタカナ -h3 --katakana-hiragana カタカナ<->ひらがな --no-best-fit-chars オプションの追加 Unicode からの変換の際に、往復安全性が確保されない文字の変 換を行いません。 Unicode から Unicode の変換の際に -x と共 に指定すると、 nkf を UTF 形式の変換に用いることがで き ま す。(逆に言えば、これを指定しないと一部の文字が保存されま せん) 01/Apr/2006 10 NKF(1) NKF(1) パスに関わる文字列を変換する際には、このオプションを指定す ることを強く推奨します。 --in-place[=SUFFIX] オプションの追加 タ イムスタンプを保持する --overwrite に対し、タイムスタン プを更新する --in-place オプションを追加しました。 fallback オプションの追加 --fb-{skip, html, xml, perl, java, subchar} オプションを追 加 し ました。 Unicode から Shift_JIS, EUC-JP, ISO-2022-JP に変換する際に、変換できなかった文字をどう扱うかを指定でき ます。 --ic --oc オプションの追加 --ic= --oc= オプションを追 加しました。 Shift_JIS, CP932, EUC-JP, CP51932, eucJP-ms, ISO-2022-JP, UTF-8N (UTF-8), UTF-8-BOM, UTF-16BE, UTF-16BE-BOM(UTF-16), UTF-16LE, UTF-16LE-BOM 入 力 に は UTF8-MAC も指定することができます。 マッピングの追加、変更 JIS 系の文字コードと Unicode との対応を定義することにしま した。これらから Unicode への decode は、定義されている 範 囲での変換が正しく行われる事を保障します。定義されていない 範囲での変換は保障しません。 Unicode からの encode は、 定 義されている範囲での変換が正しく行われる事を保障し、定義さ れていない範囲での変換はエラーとなり (fallback 可 能)、 Unicode として不正な文字はスキップされる事を保障します。 その他、"Q" encodingのデコードやfold-margin等のバグを修 正。 ACKNOWLEDGE 以下のかたがた、どうもありがとうございました。 nkf 1.4 morb@fujitsu, kiss@ayumi.stars.flab.fujitsu, cen122@flab.fujitsu, yuki@flab.fujitsu 他、fujitsu & flab.fujitsuの皆さんの協力に感謝。 shinoda@cs.titech, kato@cs.titech, uematsu@cs.titech TNX kono@ie.u-ryukyu.ac.jp nkf 1.9- Akio Furukawa Andy Taki From: OHARA Shigeki Fumitaka Kitagawa Hiroaki Sengoku 01/Apr/2006 11 NKF(1) NKF(1) Ikuhiro MORITA (森田 育宏) Yoshiharu ITO Junn Ohta KAWAMURA Masao Kazuhiko Mori Keitaro Isokawa Ken-ichi Hirose Ki-ichiro SATO Kiwamu Aoyama Koichi Hirayama Mitsuru Hase(長谷 満) OHARA Shigeki (大原 重樹) Rei FURUKAWA Satoru Takabayashi Shigeyuki Takagi Shin MICHIMUKO Tadamasa Teranishi TOYODA Jiro TSUCHIYA Masatoshi Tsutomu Sakai YAMASHITA Junji (山下 純司) Yasuyuki Sato Yoshiaki Yanagihara hat@so-net DCC技術部渡辺 かとぺ / 加藤 貴司 かべdais ひろせ まさあき イントラネットシステム(株)松尾 鵜飼文敏 塩崎 毅彦(SHIOZAKI Takehiko) 河村雅夫 (Media Lab.) 河野 康司 喜瀬“冬猫”浩@南国沖縄 金井 智彦 桂田 祐史 (かつらだ まさし) 高橋宜盟 国吉 黒江明彦 三宅正泰 山倉 真 山本 芳人 山野裕司 (やまのゆうじ) 重村法克 小島基靖 上田 健 新井 康司 (Koji Arai) 森 千絵子 森 和彦 水野 貴文 前地和俊 仲宗根@並列信頼研 猪谷 英一郎 == Eiichiro Itani 藤原 秀行 01/Apr/2006 12 NKF(1) NKF(1) 八田 真行 (Masayuki Hatta) 尾川敏也 望月 孝志 木村(@筑波大学数学研究科) 野村俊彰 有岡@ミノルタ 有沢 明宏 落合一喜 林 亮 國安 治 木下 雄介 成瀬ゆい 鶴谷直樹 中田伸悦 わたなべひろふみ MoonWolf 河野真治 www.ie.u-ryukyu.ac.jp/~kono/nkf/ 01/Apr/2006 13