文字コードの自動判定処理と、文字コードのチェック処理です。
文字コードは、JIS, SJIS, EUCコードに対応しています。
文字コードについての解説は、文字コードについてを参照してください。
同じ機能の、Perlスクリプトと、C言語のプログラムがあります。
2つのソースを比較すことで、言語の違いを把握できます。
プログラムはC言語で最適化を前提として開発していますので、Perl版は遅いです。
ただ、カスタマイズして、システム固有のチェックを組み込む場合には便利です。
Unicode(UTF-8,UTF-16)対応版は、2000年3月公開を目標に開発中です。
文字コードチェック処理には、以下のファイルがあります。
ファイル名をクリックするとダウンロードできます。
一括ダウンロード(code.tar.gz)もできます。
| Perl版 | C言語版 | 説明 |
|---|---|---|
| getcode.pl | getcode.c | 文字コードの自動判定コマンド |
| chkcode.pl | chkcode.c | 文字コードのチェックコマンド |
| chkstr.pl | chkstr.c | 文字コードチェックライブラリ |
| isfile.c | ファイルタイプチェックライブラリ | |
| makefile | メイクファイル |
展開、インストールは、以下の手順で行います。
/usr/local/pub ダウンロードしたファイルを格納する場所 /usr/local/src ファイル展開、メイクなどを実施する場所 unix# cd /usr/local/src unix# gzip -cd ../pub/code.tar.gz | tar -xvf - unix# cd code unix# make unix# cp getcode chkcode /usr/local/bin/. |
指定したファイルの文字コードを判断し、ファイル名と文字コードを表示します。
| getcode.c |
|---|
/********************/ /* 文字コードの判定 */ /********************/ 名前 ファイルの文字コードの自動判定 形式 getcode files 機能 指定したファイルの文字コードを判断し、ファイル名と文字コードを表示する。 出力 ASCII text JIS text SJIS text EUC text Unknown(EUC/SJIS) text Binary file 制限事項 |
ファイルの中の文字コードが正しいかどうかをチェックし、異常なデータを表示します。
-dオプションを付けると、機種依存文字を使用しているかどうかのチェックも行います。
| getcode.c |
|---|
/************************/ /* 文字コードのチェック */ /************************/ 名前 ファイルの文字コードチェック 形式 chkcode [options] files 機能 指定したファイルの文字コードをチェックし、異常データを表示する。 オプション -a: ASCIIコードとしてチェック -j: JISコードとしてチェック -s: ShiftJISコードとしてチェック -e: EUCコードとしてチェック -d: 機種依存文字チェック 制限事項 |
文字コードの自動判定は、chk1st関数で、文字列の値から文字コードが決定されるものを探します。 特定できない場合は、SJISコードと、EUCコードに対して、チェックします。 文字列の値によっては、SJISコードと、EUCコードの自動判定ができない場合があります。
文字コードのチェックは、それぞれの文字コードのマルチバイト毎のチェックをします。 各バイト毎の正しい値は、文字コードについてを参照してください。
| chkstr.c |
|---|
/**********************/
/* 文字コード判定処理 */
/**********************/
getcode(str)
機能
日本語文字列の文字コードの自動判定
引数
char *str; /* 文字列 (i) */
返却値
0: 不定
1: euc
2: sjis
3: jis
制限事項
/******************/
/* 文字種判定処理 */
/******************/
chk1st(buf, len)
機能
文字種判定処理
引数
char *buf; /* チェックデータ格納バッファ */
int len; /* チェックデータサイズ */
返却値
0: ASCII
1: JIS
2: SJIS
3: EUC
4: Unknown(EUC/SJIS)
-1: Binary
/***********************/
/* ASCIIコード判定処理 */
/***********************/
chkasc(buf, len)
機能
ASCIIコード判定処理
引数
char *buf; /* チェックデータ格納バッファ */
int len; /* チェックデータサイズ */
返却値
0: OK
-1: NG
/*********************/
/* JISコード判定処理 */
/*********************/
chkjis(buf, len)
機能
JISコード判定処理
引数
char *buf; /* チェックデータ格納バッファ */
int len; /* チェックデータサイズ */
返却値
0000: ASCII
0001: JIS漢字
0010: JISカナ
0100: JIS漢字(NEC拡張外字)
1000: JIS漢字(機種依存)
-1: NG
/**********************/
/* SJISコード判定処理 */
/**********************/
chksjis(buf, len)
機能
SJISコード判定処理
引数
char *buf; /* チェックデータ格納バッファ */
int len; /* チェックデータサイズ */
返却値
0000: ASCII
0001: JIS漢字
0010: JISカナ
0100: JIS漢字(NEC拡張外字)
1000: JIS漢字(機種依存)
-1: NG
/*********************/
/* EUCコード判定処理 */
/*********************/
chkeuc(buf, len, stat)
機能
EUCコード判定処理
引数
char *buf; /* チェックデータ格納バッファ */
int len; /* チェックデータサイズ */
int stat; /* 最終バイトの状態 */
/* 0: 文字の最後 */
/* 1: JISカナの1バイト目 */
/* 2: JIS漢字の1バイト目 */
返却値
0000: ASCII
0001: JIS漢字
0010: JISカナ
0100: JIS漢字(NEC拡張外字)
1000: JIS漢字(機種依存)
-1: NG
|
ファイルの種類を判定します。
通常ファイルとディレクトリかどうかを判定することができます。
Perlやシェルの -e や -d の機能に相当する関数です。
| isfile.c |
|---|
/**************************/ /* ファイルタイプ判定処理 */ /**************************/ isfile(path) 機能 パスが通常ファイルかどうかを判定する 引数 char *path; /* パス名 (i) */ 返却値 0: 通常ファイル 1: 通常ファイル以外 /************************/ /* ディレクトリ判定処理 */ /************************/ isdir(path) 機能 パスがディレクトリかどうかを判定する 引数 char *path; /* パス名 (i) */ 返却値 0: ディレクトリ 1: ディレクトリ以外 |