kazmax - Linux で自宅サーバー

kcc - コマンド (プログラム) の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 形式
  3. 機能説明
  4. オプション
  5. 使用例
  6. 補足説明
  7. 関連項目
  8. その他

名前

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

形式

kcc [ - IO chnvxz ] [ -b bufsize ] [ file ] ...

機能説明

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

使える漢字コードは JIS0(7 ビットおよび 8 ビット),シフト JIS0,-1EUC0,-1DEC0 です。 入力コードは,-1EUC0,-1DEC0 あるいはシフト JIS のいずれかと 7 ビット JIS との組み合せに限り,混在が可能です。-1JIS0 の半角仮名は -1SI0 / -1SO0-1ESC0(I ともに認識されます。

オプション

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


e
EUC0(7 ビット JIS 混在可)
d
DEC0(7 ビット JIS 混在可)
s
シフト JIS0(7 ビット JIS 混在可)
j7 または k
7 ビット JIS
8
8 ビット JIS

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


e
EUC
d
DEC
s
シフト JIS
jXY または 7XY
7 ビット -1JIS0( -1SI0 / -1SO0 による JIS 仮名指示)
k XY
7 ビット -1JIS0( -1ESC0(I による JIS 仮名指示)
8 XY
8 ビット JIS

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


X
漢字指定
B
-1ESC0$B (第 2 次規格漢字指示) .TP .B @ .BR -1ESC0$@ (第 1 次規格漢字指示)
+
-1ESC0&@-1ESC0$B (第 3 次規格漢字指示) .RE .TP .I Y 英数字指定 .RS 5 .TP .B B .BR -1ESC0(B (ASCII 指示)
J
-1ESC0(J (JIS ローマ字指示) .TP .B H .BR -1ESC0(H (スウェーデン名前用文字指示)

-v
入力コードの判別結果を標準エラー出力に出力します。
-x
拡張モード。入力コードの自動判別で,外字や拡張文字領域(-1EUC0 の外 字・未定義の半角仮名・制御文字 C1 の各領域,およびシフト JIS の拡張文字領域)を認識します。-1DEC0 と EUC との判別はこのモードでのみ,なされます。
-z
縮小モード。入力コードの自動判別で半角仮名を認識しません(7 ビット JIS を除く)。半角仮名を含まないファイルの場合,これを指定すると判別の確度が 高まります。
-h
半角仮名を DEC に変換すると全角のカタカナに変換されますが,このオプションを指定するとひ らがなになります。
-n
外字・拡張文字・補助漢字領域を“□”に,半角仮名の未定義領域を半角の “・”に変換します。
-b bufsize
入力の判別がつかないあいだ入力をためておくバッファーの大きさを指定しま す。省略時は 8k バイトです。
-c
変換を行わず,入力コードの種類だけを調べ,結果を標準出力に出力します。通 常の自動判別の場合とは異なり,ファイルは最後まで調べられます。ただし,途 中でコード体系に矛盾が見つかった場合には読み込みを中断し“data”と表示し ます。-x-z 以外のオプションは無効になります。

使用例


入力コード自動判別で出力コードは EUC
シフト JIS のファイル 2 つを JIS へ変換し連結
command 出力を JIS0(-1JIS0 第 3 次規格 漢字指示,-1JIS0 ローマ字指示,-1ESC0(I による JIS 仮名指示)へ
file のコードを判別する(変換は行わない)

補足説明

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

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

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

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

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

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

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

関連項目

  cat (1) 

その他

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

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

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