nkf - ネットワーク用漢字コード変換フィルタの資料
(このドキュメントは、nkf-2.1.0のドキュメントnkf.docを元に作成されています)

■概要

    nkf
    はネットワークでメールやニュースの読み書きをするために作られた、漢字コー
    ドの変換フィルタである。

    このnkfの特徴としては、入力漢字コード系の統計的な自動認識機能がある。
    このため、利用者は、入力漢字コード系が何であるかを知らなくても、出力漢字
    コード系のみ指定すれば良いことになる。
    ただ、この判定機構は、理論的には完全ではないが、通常のニュースやメールの
    メッセージについては確実に動作する安全なものにはなっている。

    現在、nkfが認識できる入力の漢字コード系は、いわゆる JIS コード
    (ISO-2022-JP に基づくもの)、Shift_JIS (MS 漢字コード)、 日本語 EUC (AT&T
    コード)、UTF-8、UTF-16 のいずれかである。
    出力する漢字コード系も、これらである。
    入力は、ファイルを指定しなければ、標準入力となる。
    出力は標準出力である。


■オプション

    指定できるオプションは、以下の通り。 -mu のように続けることができる。
    (SetNkfOptionで指定する場合には'-'は必要ありません)

    -j  JIS コードを出力する。

    -e  EUC コードを出力する。

    -s  Shift_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 無し)

    -m[BQSN0]
        MIME を解読する。(デフォルト) ISO-2022-JP (B encode) と ISO-8859-1
        (Q encode) のみを解読する。 ISO-8859-1 (Latin-1) を解読する時は、-l
        フラグも必要である。 -m0 では MIME を解読しない。 -mB, -mQ
        では、BASE64, Q encode されているものとして処理する。

        -mB MIME base64 stream を解読する。 ヘッダなどは取り除くこと。

        -mQ MIME quoted stream を解読する。

        -mS MIME のチェックを厳しくする (デフォルト)

        -mN MIME のチェックを緩くする

        -m0 MIME を解読しない。

        -mS は、宣言の内容と、その後に続く encoded-text
        の整合性をチェックする。 -mN は、改行で切られた MIME
        なども解読する。解読が止まらないこともある。

    -M[BQ]
        MIME に変換する。

        -M  ヘッダ形式に変換する

        -MB base64 stream に変換する

        -MQ Quoted stream に変換する

    -J -E -S -W
        期待される入力コードの性質を指定する。

        -J  ISO-2022-JP を仮定する。

        -E  日本語 EUC (AT&T) を仮定する。

        -S  Shift_JIS を仮定する。 いわゆる半角カナ (JIS X 0201 片仮名)
            も受け入れる。

        -W  UTF-8 を仮定する。

        -W8 UTF-8 を仮定する。

        -W16
            UTF-16 (Little Endian)を仮定する。

        -W16B
            UTF-16 (Big Endian)を仮定する。

        -W16L
            UTF-16 (Little Endian)を仮定する。

    -x  通常おこなわれる、いわゆる半角カナ (JIS X 0201 片仮名)
        からいわゆる全角カナ (JIS X 0208 片仮名)
        への変換を行わず、半角カナを保存する。 入力は、Shift_JIS の 1byte
        カナ、SO/SI、ESC-(-I, SSO を受け付ける。 出力は、日本語 EUC 中では
        SSO、JIS コード中では ESC-(-I をデフォルトで用いる。

    -X  いわゆる半角カナ (JIS X 0201 片仮名) を いわゆる全角カナ (JIS X 0208
        片仮名) へと変換する。

    -B  壊れた (Broken) JIS コード。 ESC がなくなったと仮定する。

        -B1 ESC-(, ESC-$ のあとのコードを問わない

        -B2 改行のあとに強制的に ASCII に戻す

    -f[*m*[-*n*]]
        一行 *m* 文字になるように、マージンを *n*
        として簡単な整形をおこなう。 デフォルトは文字数は 60、マージンは 10
        である。

    -Z[0-3]
        JIS X 0208 英数字と若干の記号を ASCII に変換する。
        つまり、全角を半角に変換する。

        -Z -Z0
            Convert X0208 alphabet to ASCII.

        -Z1 JIS X 0208 和字間隔を ASCII space 一つに変換する。

        -Z2 JIS X 0208 和字間隔を ASCII space 二つに変換する。

        -Z3 ＞、＜、”、＆、を &gt;、&lt;、&quot;、&amp; に変換する。

    -b  バッファリング出力を行う。(デフォルト)

    -u  出力時に、バッファリングしない。 ssh localhost | nkf -u
        というように使う。

    -t  何もしない。

    -I  ISO-2022-JP 以外の漢字コードを〓に変換。

    -i[@B]
        JIS 漢字を指示するシーケンスを指定する。

        -i@ JIS X 0208-1978 を用いる。

        -iB JIS X 0208-1983/1990 を用いる。

    -o[BJH]
        1 バイト英数文字セットを指示するシーケンスを指定する。

        -oB 1 バイト英数文字セットとして US-ASCII を用いる。

        -oJ 1 バイト英数文字セットとして JIS X 0201 Roman を用いる。

        -oH ESC ( H は初期の JUNET
            コードでのみ用いられたもので、現在は使ってはならない。

    -r  ROT13/47 の変換をする。

    -g  自動判別の結果を出力します。

    -T  テキストモードで出力する。(MS-DOS 上でのみ効力を持つ)

    -l  0x80-0xfe のコードを ISO-8859-1 (Latin-1) として扱う。 JIS
        コードアウトプットとの組合せみのみ有効。 -s, -e, -x とは両立しない。

    -O  ファイルに出力する。 UNIX では不要な機能だが Windows や MSDOS
        では必要らしい。
        直後の引き数でなく、最後のファイル名が出力ファイル名となり上書きされ
        てしまうので注意。 ファイル名がない場合は nkf.out。

    -L[uwm] -d -c
        改行コードを変換する。

        -Lu -d
            unix (LF)

        -Lw -c
            windows (CRLF)

        -Lm mac (CR)

        デフォルトでは変換しない。

    --ic=<input_codeset --oc=<output_codeset>>
        入力・出力の漢字コード系を指定します。

        ISO-2022-JP
            いわゆる JIS コード。-j, -J と同じ。

        ISO-2022-JP-1
            RFC 2237 に定められた形式。 JIS X 0212 を含む。

        ISO-2022-JP-3
            RFC 2237 に定められた形式。 JIS X 0213 を含む。

        EUC-JP
            EUC コード。-e, -E と同じ。

        EUC-JISX0213
            文字集合に JIS X 0213:2000 を用いた EUC-JP。

        EUC-JIS-2004
            文字集合に JIS X 0213:2004 を用いた EUC-JP。

        eucJP-ascii
            オープングループ日本ベンダ協議会が定義した eucJP-ascii。 -x
            が暗黙のうちに指定される。

        eucJP-ms
            オープングループ日本ベンダ協議会が定義した euc-JPms。 -x
            が暗黙のうちに指定される。

        CP51932
            Micorosft Code Page 51932。 -x が暗黙のうちに指定される。

        Shift_JIS
            Shift_JIS。 -s, -S と同じ。

        Shift_JISX0213
            文字集合に JIS X 0213:2000 を用いた Shift_JIS。

        Shift_JIS-2004
            文字集合に JIS X 0213:2004 を用いた Shift_JIS。

        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
        対応する変換をします。

    --hiragana --katakana
        平仮名、片仮名変換

    --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
        コマンドの簡単な説明を表示する。

    -V  nkf の設定を表示する。

    -v --version
        nkf のバージョンを表示する。

    --  これ以降のオプションを無視する

    --exec-in
        nkf [options] --exec-in cmd args... とやると、cmd の出力を nkf
        の入力とする (config.h で EXEC_IO を define
        してコンパイルした時のみ有効)

    --exec-out
        nkf [options] --exec-out cmd args... とやると、nkf の出力を cmd
        の入力とする (config.h で EXEC_IO を define
        してコンパイルした時のみ有効)

■BUGS

    実は、入力のコード系の判定は、Shift_JIS と EUC
    との自動判定であり、最初に特定できる文字が来た時点で確定してしまう。
    そして、特定不能の間は保留バッファにためておかれ、確定後に処理される。
    このため、7 ビット JIS は常に認識される。 Shift_JIS、EUC
    混合もほとんどの場合は問題がない。 ただし、Shift_JIS のいわゆる半角カナ
    (JIS X 0201 片仮名) と EUC 漢字が識別できない。
    したがって、デフォルトでは Shift_JIS
    のいわゆる半角カナはないと仮定している。 (つまり、Shift_JIS か EUC
    か迷った時は EUC とみなす)

    Unicode
    の日本語以外の部分の変換には対応していないが、--no-best-fit-chars
    を指定すれば、UTF-8 と UTF-16 の相互変換をすることは可能である。

■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 void@merope.pleiades.or.jp (Kusakabe Youichi)
    NIDE Naoyuki <nide@ics.nara-wu.ac.jp> ohta@src.ricoh.co.jp (Junn Ohta)
    inouet@strl.nhk.or.jp (Tomoyuki Inoue) kiri@pulser.win.or.jp (Tetsuaki
    Kiriyama) Kimihiko Sato <sato@sail.t.u-tokyo.ac.jp>
    a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe) kono@ie.u-ryukyu.ac.jp
    (Shinji Kono) GHG00637@nifty-serve.or.jp (COW)

  nkf 1.9-
    河野真治
    Akio Furukawa
    Andy Taki
    From: OHARA Shigeki
    Fumitaka Kitagawa
    Hiroaki Sengoku
    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
    ＤＣＣ技術部渡辺
    かとぺ / 加藤 貴司
    かべdais
    ひろせ まさあき
    イントラネットシステム(株)松尾
    鵜飼文敏
    塩崎 毅彦(SHIOZAKI Takehiko)
    河村雅夫 (Media Lab.)
    河野 康司
    喜瀬“冬猫”浩＠南国沖縄
    金井 智彦
    桂田 祐史 (かつらだ まさし)
    高橋宜盟
    国吉
    黒江明彦
    三宅正泰
    山倉 真
    山本 芳人
    山野裕司 (やまのゆうじ)
    重村法克
    小島基靖
    上田　健
    新井 康司 (Koji Arai)
    森　千絵子
    森　和彦
    水野 貴文
    前地和俊
    仲宗根＠並列信頼研
    猪谷 英一郎 == Eiichiro Itani
    藤原　秀行
    八田 真行 (Masayuki Hatta)
    尾川敏也
    望月 孝志
    木村 (＠筑波大学数学研究科)
    野村俊彰
    有岡＠ミノルタ
    有沢 明宏
    落合一喜
    林 亮
    國安 治
    木下 雄介
    田中隆裕
    鶴谷直樹
    中田伸悦
    わたなべひろふみ
    MoonWolf
    sava

■AUTHOR

    市川 至 ichikawa@flab.fujitsu.co.jp (was ichikawa@fujitsu.JUNET)
    河野 真治 kono@ie.u-ryukyu.acjp
    Rei FURUKAWA furukawa@tcp-ip.or.jp
    成瀬
    mastodon

    http://sourceforge.jp/projects/nkf/

    Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).

    Copyright (C) 1996-2009, The nkf Project.

