1.概要 このプログラムは、UTF-8, UTF-16, EUC-JP, Shift-JIS, JIS(ISO2022-JP)で書かれた 文章をUTF-8, UTF-16, EUC-JP, Shift-JIS, JIS(ISO2022-JP)の文章に変換するための フィルタです。 また、Mac、UNIX、Windowsそれぞれで一般的な改行コード(MacはCR, UNIXはLF, WindowsはCR+LF)を相互変換することもできます。 変換を行わず、指定した文章に使われている文字コード、改行コードが何かを 調べて表示するだけの機能もあります。 変換ルーチンとしてはMac OS XのFoundationフレームワークを使用しているため 当然のことながらMac OS X上でしかコンパイル/動作できませんのでご注意下さい。 2.特徴 (宣伝とも言う:-) 文字コード変換フィルタとしてはnkfという有名なソフトがありますが、それに 比較して、mcccには以下のような特徴があります。 1)長い文章の変換が速い 2)UTF-8の短い文章の自動認識率が高い 3)Mac OS XのTextEditなどで作成した、文字コードUTF-8の文章に濁音/半濁音の 文字があると、nkfで変換すると、濁点/半濁点が分離して表現される(例えば、 'が'は'か'と'”'とに分離され、'か”'となる)が、mcccではそのまま一文字に 変換される。 4)64bitおよび32bit Intel Macで動作する コンパイルし直せばPPC Macでも動作する(はず^_^;)。 3.インストール mcccという名前のファイルを適当な場所(pathの通っているところが便利です)に コピー/移動するだけです。 sudo make install とすると/usr/local/binにコピー(インストール)します。 もし、ソースからコンパイルしたいなら、Makefileを用いて、以下のようにして 作成できます。 まず、mcccファイルを消すために make clean を実行して下さい。次に make とすればmccc(64/32bit版)が作成されます。 PPC Mac版を作成したい時は、makeの代りに make ppc 32bit Intel Mac版を作成したい時は make i386 64bit Intel Mac版を作成したい時は make x86_64 として下さい。 あとは、できたmcccファイルを適当な場所にコピー/移動して使って下さい。 4.使い方 mcccは標準入力あるいはファイルから、UTF-8, UTF-16, EUC-JP, Shift-JIS及びJIS (ISO2022-JP)の各文字コードで書かれ、CR, LF及びCR+LFの各改行コードを持つ 文字列を入力し、異なる文字コードと改行コードを持つ文字列に変換して、標準出力 あるいはファイルに吐き出します。 入力/出力の文字コードは以下のパラメータで指定します。 -ia : 入力文字コード自動認識 -iu : 入力はUTF-8 (デフォールト) -iU : 入力はUTF-16 -ie : 入力はEUC-JP -is : 入力はShift-JIS -ij : 入力はJIS(ISO2022-JP) -ou : 出力はUTF-8 -oU : 出力はUTF-16 -oe : 出力はEUC-JP (環境変数LANG未設定時のデフォールト) -os : 出力はShift-JIS -oj : 出力はJIS(ISO2022-JP) -t : スルーモード(文字コード変換なし) 出力文字コードを明示的に指定しなかったときは、環境変数LANGに設定された値に 対応する文字コードが指定されたものとみなします。 また、入力/出力の改行コードは以下のパラメータで指定します。 これらのパラメータを指定しないときは、改行コード変換を行いません。 -am : 入力改行コード自動認識、出力はCR(Mac) -au : 入力改行コード自動認識、出力はLF(UNIX) -aw : 入力改行コード自動認識、出力はCR+LF(Windows) -lm : 混在したすべての種類の改行コードをCR(Mac)に -lu : 混在したすべての種類の改行コードをLF(UNIX)に -lw : 混在したすべての種類の改行コードをCR+LF(Windows)に -mu : 入力はCR(Mac)、出力はLF(UNIX) -mw : 入力はCR(Mac)、出力はCR+LF(Windows) -um : 入力はLF(UNIX)、出力はCR(Mac) -uw : 入力はLF(UNIX)、出力はCR+LF(Windows) -wm : 入力はCR+LF(Windows)、出力はCR(Mac) -wu : 入力はCR+LF(Windows)、出力はLF(UNIX) さらに、入出力先は以下のパラメータで指定します。 -ow : オーバーライト(入力ファイルを出力ファイルとする) -nc : 出力ファイルが存在しても書き込む(元ファイルは壊れる) ファイル名1 : 入力ファイル名(指定なしあるいはstdin指定で標準入力) ファイル名2 : 出力ファイル名(-owなしかつ指定なしで標準出力) ファイル名は先に指定したもの(ファイル名1)が入力ファイル名、2番目に指定したもの (ファイル名2)が出力ファイル名となります。 ファイル名1およびファイル名2を指定しないとき、入力は標準入力、出力は標準出力と なります。 オーバーライト指定(-ow)は、入力が標準入力か、出力が標準出力のとき、 あるいは入力ファイル名と出力ファイル名が異なるときは無効になります。 逆に、入力ファイル名と出力ファイル名が同一のとき、オーバーライト指定されたときと 同じ処理を行います。 出力ファイル名を指定したとき、そのファイルが既に存在している場合、通常はエラー 終了して、書き込みは行いませんが、-ncパラメータを指定することにより、既存 ファイルを上書きするようになります。 当然、元ファイルは壊れますので、注意して使用してください。 なお、オーバーライトが有効な場合は、-ncパラメータの有り無しに関係なく 元ファイルは上書きされることになります。 文字コードや改行コードの変換をせず、指定した文字列文章の文字コードや改行コードが 何なのかを知りたいだけのときは、以下のパラメータを指定します。 -fa : 入力改行コードと文字コードを自動認識し表示(変換はしない) -fc : 入力文字コードを自動認識し表示(変換はしない) -fl : 入力改行コードを自動認識し表示(変換はしない) この場合、入出力文字コード/改行コード指定のパラメータおよび出力ファイル名指定 パラメータはすべて無視されます。 その他、以下のパラメータが指定できます。 -v : バージョン表示(他のパラメータはすべて無視) -h : ヘルプ表示(出力文字/改行コードに従って変換、入出力ファイル名無視) 5.使用例 例えば、文字コードを日本語(EUCやUTF-8)に設定したTerminal上や、Jterminalの ような日本語文字コードが扱えるTerminal上で ls -vl | mccc とやれば、日本語を含むファイル名を正常に表示する事ができます。 もし、shellとしてtcshを使っているなら、~/.tcshrcファイルなどに alias lsu "ls -vC \!:1* | mccc" と書いておけば、lsの代りにlsuを使うことで、日本語ファイル名も正常に表示する ことができるようになります。 また、Macで作った文章(mac.txtとする)を、Windowsで普通に使う文章に変換したい ときは、 cat mac.txt | mccc -t -mw > windows.txt のようにすれば、文字コードはそのまま(普通はShift-JIS)で、改行コードを CR(Macで使用)からCR+LF(Windowsで使用)に変更した文章(windows.txt)が 得られます。 これはファイル名指定を使って次のようにすることもできます。 mccc -t -mw mac.txt windows.txt 同様に、Macで作った文章(mac.txtとする)をUNIXで使いたいときは、 cat mac.txt | mccc -is -ou -mu > unix.txt とすればよいことになります。 (文字コードをShift-JISからEUC-JPに、改行コードをCRからLFに) ファイル名はそのままで内容を書き換えたいときは、 mccc -is -ou -mu -ow mac.txt とすればできます。 2種類以上の改行コードが混在している文章(mixlb.txtとする)をMacの改行コードに 統一したいなら、 mccc -lm -t mixlb.txt > mac.txt とすればよいことになります。 変換をせず、文字コードと改行コードが何かを知りたいだけなら、以下のように 指定して下さい。 mccc -fa mac.txt 表示文字コードがUTF-8の端末(Terminalなど)上でヘルプを表示する方法は 以下の通りです。 mccc -h -ou バージョン表示は以下の通りです。 mccc -v 6.注意事項 本プログラムで文字コード自動認識が指定されたときは、文字コードを完全に判定 できるまで、あるいは入力データをすべて読み込むまで、出力を行いません。 ですから、文字コード自動認識を指定して端末から文章を入力したときは、文字認識 できるまで、あるいはCtrl-Dを入力するまで、変換結果を得ることは出来ません。 (Returnキーを入力しただけでは変換されないことがある) 逆に入力文字コードを指定したときは、Returnキーを入力する度に変換結果が出力 されることになります。 指定された入力文字コードと実際に入力されたデータの文字コードが異なる場合、 出力データが空になることがあります。ですから、オーバーライト指定をするときは 予めテストをしてバックアップを取っておくことをお勧めします。 文字コード自動認識、あるいはオーバーライトを指定して、非常に大量の文章を 入力すると、メモリ確保に失敗し途中までの文章しか変換されない、あるいは まったく変換されないこともあり得ます。 文字コードの自動認識は完璧ではありません(というか完璧な自動認識は不可能)し、 処理時間もかかります(場合によっては全文字調べる)ので、入力文字コードが 予め判っている時は明示的に指定した方が効率的でよいでしょう。 改行コードの自動認識は、-l*(-lu, -lm, -lw)指定時を除き、取り込み単位ごとの 最初の改行コードによって決定されます。従って、色々な改行コードが混ざっていると 意図した通りに変換されないかもしれません。 その場合は、(少し変換が遅くなりますが)-l*(-lu, -lm, -lw)指定で変換して下さい。 指定した入力改行コードと実際の入力データの改行コードが異なる場合、 一致する部分だけ変換し、一致しない部分は入力コードをそのまま残します。 例えば、入力CR、出力LFを指定し、実際の文章の改行コードがCR+LFのとき、 変換後はLF+LF(改行が2個)となります。 矛盾した2つ以上のパラメータを指定した場合、最後に指定したパラメータが 有効になります。例えば、 mccc -ia -iu と指定した場合、"-ia"は無効となり、"-iu"が有効となります。 make ppcでコンパイルし直せば、PPC Macでも動作するはずですが、 私はPPC Macを持っていませんので、テストができません。 従って、もしかしたら、動かないかもしれませんが、ご容赦ください。 7.変更履歴 ・0.7.2 (2014/04/29) 64bit版としてコンパイルできるようMakefile変更 ReadMeファイルの文字コードをEUCからUTF8に変更 ソースコード内のヘルプ文章の文字コードをUTF8に変更 ・0.7.1 (2006/04/22) コマンドラインからbuild(make)するように再変更 ppc版、intel版も作れるようにMakefile変更 短いUTF8文章の認識性能向上 ・0.7 (2006/01/15) ユニバーサルバイナリ化(のつもり^_^;) buildにXCodeを使うように変更 ・0.6.4 (2004/12/22) 出力ファイル存在時、-ncパラメータ未指定ならエラーにするよう変更 ヘルプメッセージに、-ncパラメータの説明を追加 メモリ確保に失敗時、core dumpの可能性があったものを修正 ・0.6.3 (2004/12/05) ファイル名としてディレクトリ名等を指定するとcore dumpするのを修正 Makefileに簡単なコピーコマンド(インストール用)追加 ヘルプメッセージの表示処理を変更 ・0.6.2 (2004/11/23) UTF-8をShift-JISと誤認識する場合があり、判定ロジック修正 ・0.6.1 (2004/07/01) 明示的に出力文字コードが指定されないときは環境変数LANGに従うよう変更 (デフォールトが変更となるので注意) ・0.6 (2004/02/22)  混在した改行コードをすべて同一種類の改行コードにするパラメータ追加  文字コード、改行コードを変換せず、認識結果のみを表示するパラメータ追加 エラーメッセージ内容の修正 エラーメッセージを標準出力(stdout)から標準エラー出力(stderr)へ変更 ヘルプ表示で改行コード変換もできるように変更 ・0.5.3 (2004/02/07) 認識精度を上げるため、判定スレッショルド変更 ある文字コードに他の文字コードが多少混じっても許すように変更 ・0.5.2 (2004/02/07) 長い文章でまれに、EUC-JPとShift-JISとUTF-8との間で誤認識する問題の修正 ・0.5.1 (2003/12/29) バージョン表示(-v)機能を追加 文字コード変換付きヘルプ表示(-h)機能を追加 ・0.5 (2003/11/23) 入出力ファイル名指定機能を追加 ファイルオーバーライト指定(-ow)の追加 入力単位を細かくできるように入力方法を変更(fread -> read) ・0.4 (2003/10/05) 改行コード(CR, LFまたはCR+LF)の変換機能を追加 UTF-16への変換でおかしくなる場合があるのを修正 ・0.3.4 (2003/09/26) 文字コードの認識、変換単位を1回の読み取り単位内の改行コードが存在する までに変更。これによりメモリ大量消費を回避し、変換までの待ち時間を 少なくした ・0.3.3 (2003/07/14) EUC-JPとShift-JISとの間で誤認識する場合があり、修正 ・0.3.2 (2003/06/29) Shift-JISとUTF-8との間で誤認識する場合があり、修正 ・0.3.1 (2003/05/06) EUC-JPとShift-JISとの間で誤認識する場合があり、修正 ・0.3 (2003/02/04) 入力文字コードUTF-8, UTF-16, EUC-JP, Shift-JIS, JIS(ISO2022-JP)自動認識対応 ・0.2 (2002/10/11) 入出力ともUTF-8, UTF-16, EUC-JP, Shift-JIS, JIS(ISO2022-JP)に 変換不能文字があってもできるだけ処理を続ける 改行のない長い文章も変換可能に ・0.1 (2002/08/08) 初期バージョン 入力:UTF8 -> 出力:日本語EUCのみ 8.著作権、他 このソフトの著作権は私(yan@yansite.jp)にあります。 しかし、このソフトを使用することによって、どのような不利益を被ろうとも わたしには一切の責任はとれません。使用者自身の責任でお使い下さい。 また、どのように改変、改造、修正してもらっても構いませんが、個人の責任に おいて行ってください。 このソフトの在処は以下の通りです。 http://www.yansite.jp/softparts/ それでは、お楽しみ下さい。