KCC(L)

名前
kcc - 自動判別機能つき漢字コード変換

形式
kcc [ -IOchnvxz ] [ -b bufsize ] [ file ] ...

機能説明
kcc は，指定した file を順番に読み込み，漢字コードを変換して標準出力に出力するフィルターです。 ファイルの指定がないとき，あるいはファイル名として - が指定されたときには標準入力から読み込みます。入出力の漢字コードはオプシ ョンで指定しますが，入力コードを指定しないとファイルごとの自動判別になり ます。

使える漢字コードは JIS（7 ビットおよび 8 ビット），シフト JIS，EUC，DEC です。 入力コードは，EUC，DEC あるいはシフト JIS のいずれかと 7 ビット JIS との組み合せに限り，混在が可能です。JIS の半角仮名は SI/SO，ESC(I ともに認識されます。

オプション

-O
-IO I で入力漢字コードを，O で出力漢字コードを指定します。入力コードの指定がないときには自動判別に， また，どちらも指定しないとき出力コードは 7 ビット JIS になります。

    入力コードを指定する I は以下のうちの 1 つです。

    e   EUC（7 ビット JIS 混在可）
    d   DEC（7 ビット JIS 混在可）
    s   シフト JIS（7 ビット JIS 混在可）
    j，7 または k
        7 ビット JIS
    8   8 ビット JIS

    出力コードを指定する O は以下のうちの 1 つです。

    e   EUC
    d   DEC
    s   シフト JIS
    jXY または 7XY
        7 ビット JIS（SI/SO による JIS 仮名指示）
    kXY 7 ビット JIS（ESC(I による JIS 仮名指示）
    8XY 8 ビット JIS

    O 中の XY で，JIS コード出力でのエスケープシークェンスが指定できます。省略 すると BJ とみなされます。なお，補助漢字指定は ESC$(D で固定です。

    X   漢字指定
        B   ESC$B（第 2 次規格漢字指示）
        @   ESC$@（第 1 次規格漢字指示）
        +   ESC&@ESC$B（第 3 次規格漢字指示）
    Y   英数字指定
        B   ESC(B（ASCII 指示）
        J   ESC(J（JIS ローマ字指示）
        H   ESC(H（スウェーデン名前用文字指示）

-v  入力コードの判別結果を標準エラー出力に出力します。

-x  拡張モード。入力コードの自動判別で，外字や拡張文字領域（EUC の外 字・未定義の半角仮名・制御文字 C1 の各領域，およびシフト JIS の拡張文字領域）を認識します。DEC と EUC との判別はこのモードでのみ，なされます。

-z  縮小モード。入力コードの自動判別で半角仮名を認識しません（7 ビット JIS を除く）。半角仮名を含まないファイルの場合，これを指定すると判別の確度が 高まります。

-h  半角仮名を DEC に変換すると全角のカタカナに変換されますが，このオプションを指定するとひ らがなになります。

-n  外字・拡張文字・補助漢字領域を“□”に，半角仮名の未定義領域を半角の “・”に変換します。

-b bufsize
    入力の判別がつかないあいだ入力をためておくバッファーの大きさを指定しま す。省略時は 8k バイトです。

-c  変換を行わず，入力コードの種類だけを調べ，結果を標準出力に出力します。通 常の自動判別の場合とは異なり，ファイルは最後まで調べられます。ただし，途 中でコード体系に矛盾が見つかった場合には読み込みを中断し“data”と表示し ます。-x，-z 以外のオプションは無効になります。

使用例

% kcc -e file
    入力コード自動判別で出力コードは EUC

% kcc -sj file1 file2
    シフト JIS のファイル 2 つを JIS へ変換し連結

% command | kcc -k+J
    command 出力を JIS（JIS 第 3 次規格 漢字指示，JIS ローマ字指示，ESC(I による JIS 仮名指示）へ

% kcc -c file
    file のコードを判別する（変換は行わない）

補足説明
入力コードの自動判別は通常の文書においてはほぼ確実に行えますが，以下のよ うな問題を含んでいます。

7 ビット JIS はエスケープシークェンスによるモード切り替えによっていて確実に判別されま す。EUC と DEC は根本的には同じものです（以下 EUC 系と呼ぶ）。一方，8 ビット JIS の半角仮名はシフト JIS の半角仮名と同じです（同シフト JIS 系）。ところが，共に 8 ビットコードである EUC 系とシフト JIS 系は，領域が広く重なっていて背反しています。つまり，コードの自動判定の問 題点はこの 2 つの判別にあります。

EUC 系/シフト JIS 系の判別は行単位で行い，「シフト JIS 系でない」あるいは「EUC 系でない」と分かった時点で確定とします。 どちらにも矛盾する行が最初に現れたときには“data”扱いになり，出力内容は 保証されません。

最初に 8 ビットの漢字コードが現れてから EUC 系/シフト JIS 系の判別がつくまでは，変換を保留し，入力をバッファーにためておきますが， これがいっぱいになると EUC 系であると決めつけて変換を強行します。根拠は以下のとおりです。通常の漢字 入りの文書は JIS 非漢字か JIS 第 1 水準の漢字をまず含んでいると考えられますが，シフト JIS の場合，これらの文字は一部を除いて EUC 系の領域とは重なっていないため，確実に判別されます。つまり，判別できない ときには EUC である可能性が高いわけです。

8 ビット JIS で，半角仮名が必ず偶数個連続して現れているときは，EUC の漢字であ ると誤認されてしまうので注意が必要です。

入力が半角仮名を含まないときには -z オプションの縮小モードを利用すると判別の確度が高まります。これは重なる領 域が JIS 第 2 水準漢字内に限定されるからです。

シフト JIS の拡張領域・EUC の外字領域・EUC の制御文字 C1 の領域・EUC の半角仮名の未定義領域は，自動判別の認識対象には入ら ないので，これらを含む入力では誤った判別がなされてしまいます。このときは -x オプションで拡張モードを指定するか，入力コードを明示的に指定してくださ い。

関連項目
cat(1)

その他
通常，外字・拡張文字・補助漢字領域はそれぞれの対応する領域に投影されま す。ただし，シフト JIS への変換で拡張文字領域からはみ出す文字は，16 進で FCFC になります。 EUC と DEC の制御文字領域 C1 は， JIS へ変換する場合はそのままですが，シフト JIS への場合には削除されます。また，半角仮名の未定義領域は，シフト JIS に変換すると，半角の“・”に置き換えられます。半角仮名を DEC に変換すると全角の仮名に変換されます。

JIS コード出力の場合，改行・タブ・抹消などの制御文字や空白（半角）は，英数字 モードで出力されます。

入力コードの自動判別を誤った場合，また，それぞれの文字セットに未定義の文 字が入力された場合，出力がどうなるかは不定です。