コード変換
since Aug. 2 2002

ロシア語コード間の変換

ロシア語は複数のエンコーディングがあるため、ソフトの制約などの理由でコード変換が必要になる場合がある。Emacs ではキリル言語コードとして、ISO 8859-5、KOI8-R 及び ALT(CP866) が標準でサポートされているのに対し、Windows 標準の CP1251 は直接操作できないため、前者サポートコードに変換して閲覧・編集するのである。

コード変換プログラムはいくつも出回っているが、わたしは Transce8 をよく利用する。

これも FreeBSD ports になっているので当該ディレクトリで make install すればインストールできる。

# cd /usr/ports/converter/trans
# make install
	

transce8 のコマンド書式は以下のとおり。

% transce8 -s元コード -t先コード 元ファイル 先ファイル
	

たとえば Windows-CP1251 コードで書かれた win.txt ファイルを KOI8-R の unix.txt に変換したいなら、

% transce8 -scp1251 -tkoi8-r win.txt unix.txt
	

とする。フィルタとしても動作するので、sed、awk、sort などのユーティリティと組み合わせて余計な中間ファイルを経由せずに複雑なコマンド操作が可能である。

指定できるコードの一覧は /usr/local/lib/trans/encoding.lis に記述されている。

 

多言語間のコード変換(Emacs の利用)

コード変換の目的で Emacs をバッチで使う方法がある。

これは何が便利であるかというと、Emacs が扱えるコーディングシステムの相互変換が可能となり、通常のコード変換プログラムでサポートされていない CTEXT <-> UTF-8 多言語相互変換ができてしまうのである。

マルチリンガルテキストを表現するための標準的テキスト形式として UNICODE と CTEXT (Compound Text) があげられるかと思う。CTEXT は X11 で提案されたもので ISO 2022 に準拠した、いわゆるエスケープシーケンスを各言語コードの開始、終了に付与することによって多言語テキストを実現する方式である。

% emacs -batch -l elisp1 ファイル -l elisp2 -f save-buffer -kill
	

とすると、elisp1 に記述された Emacs-lisp(LISP 言語)を実行してファイルを読み込み、続いて elisp2 を実行し、編集結果を同じファイルに格納して終了する。これを利用して elisp1 でファイルの入力コーディングシステムを指示し、elisp2 で出力したいコーディングシステムに変更するのである。

以下に CTEXT <-> UTF-8 相互変換のための elisp ファイルを用意した。ダウンロードし、Emacs のロードパスに格納して利用できる。

 

UTF-8 -> CTEXT 変換
% emacs -batch -l iutf8.el 対象ファイル -l octext.el \
  -f save-buffer -kill

CTEXT -> UTF-8 変換
% emacs -batch -l ictext.el 対象ファイル -l outf8.el \
  -f save-buffer -kill