文字コードの自動判定処理と、文字コードのチェック処理です。
文字コードは、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: ディレクトリ以外 |