アーカイブ
なんか文字コードに躍起になっているが、もともと萌ディタの開発日記が発端である。
http://www.geocities.co.jp/SiliconValley-Oakland/3617/progress_2004Q2.html
EUCはSJISにない文字も扱える仕様に変更済み。
次にJISなんだが、そこに書いてあるようにいろいろあるわけだが、
読み込みについてはどんな実装をするか悩まずに出来た。
EUC変換のために作ったテーブルを使って、jconvert.pasで対応してないESC(IやSO/SIを判別し、
私用領域、外字領域、半角カタカナを含むすべて直にユニコード変換すればいい。
EUC変換についても書いたとおり、Windows式でないSJISに意味はないので、
JISについてもSJISと同じ0201マップ、0208マップを持つという前提で変換する。
それ以外に正解はない。
書き込みについては正解が一つではないようだ。
JISへの対応はメールへの対応に他ならず、メールで化ける可能性のある書き出しはしない。
すなわちOE同様、半カナは全カナに変換したのちに、ESC$BとESC(Bのみで書く。
OEと同様、テキスト先頭はESC(Bを入れない。
そこまではいいのだが、OEと同様、私用領域と外字の文字も書き込むかどうか。
メールにJISが使われるのは7bitコードだからであり、
7bitで表現できない文字を書いてはいけないはずなのだが、
Thunderbirdで外字を使ったメールを送受信してみると、化けずに行き来できる。
ちなみに、本当は送受信にもOEを使って試した方が良いのだろうが、
アカウント設定してないのでこれのためにやるのが面倒だ。
8bitで書き込む私用領域と外字領域の文字が不正であるかどうかは、
メーラーが送信の時点でブロックしてないんだから、不正でないという事にしてしまおう。
少なくとも、真魚での編集時点で潰すべき物ではない。
さて、書き込みにはさらに問題があって、
EUCの補助漢字領域とJISの外字領域がダブって、ユニコードからの変換テーブルを共有出来ない。
EUCの場合、SJISに補助漢字領域がないから仕方なくテーブルを持ったのであり、
JISはSJISを経由して変換しても何ら問題はないわけだから、
従来のjconvertによる変換をESC(Bに変えるだけでいいのではなかろうか。
それを言ったら、読み込みもSJIS経由を改造した物で良いのではなかろうか。
調べ尽くしたあげく、今まで通りって事に落ち着きそうな予感。
EUCへの対応については、補助漢字領域の拡張を目的に進めてきた。
すなわち、旧来のSJIS変換を行うとEUCにしかない文字が失われてしまうので、
SJISを介さずにEUC<->ユニコード変換を行うように仕様変更だ。
それはもうできあがったからそれで良い。
次にJISへの対応をどうするかという話だ。
JISは多くの拡張がなされているため、全てに対応すれば中韓国語も扱えるはずだ。
だが、中韓国語拡張したJIS文字コードはどこで利用されるのか甚だ疑問。
そもそも、なぜテキストエディタがJIS文字コードに対応しなきゃいけないかというと、
メールソフトが拡張子.emlで保存するファイルを編集するためだ。
このファイルを真魚で編集し、中韓国語を織り交ぜたJISファイルを作ったとして、
メールソフトが翻訳できなければ意味ないわけだ。
EUCやユニコードの場合なら、SJISに変換出来ない文字を書いたとしても、
それは変換しないソフトの方が悪いんであって、文字を書く方に罪はない。
しかしJISの場合は別だ。
メーラーあってのJISファイルであり、メーラーの対応を無視したJISは意味がない。
よって真魚は、どんなメーラーでも読み込めるであろう普通のJISしか書き出さないことにする。
いろんなJISの選択肢を見せたところで、素人には選べないからな。
どうなれば普通のJISなのか?
ためしに、利用人口が最も多いであろうOutlook Expressで新規保存し、
バイナリエディタで覗いてみたところ、
半角カタカナは全角に変換、ESC$B&ESC(Bでスイッチ、と言う形になっていた。
真魚もこの方法で保存すれば間違いない。
しかし問題は私用領域であり、規格には沿わないけれどちゃんと保存されている。
真魚も規格からはみ出ることを承知で保存して良いものかどうかは疑問。
ちなみに現在使っているjconvert.pasでは、
半カナは全角に、ESC$B&ESC(Jでスイッチ、私用領域も使用、という仕様だ。
逆に読み込みはなるべくたくさんの形式に対応しないといけない。
中韓国語とまでは行かないが、半角カタカナ部分だけでもいろんな書き方に対応したい。
で、いろんな書き方で半カナをまぜて作られたJISのメールは、
真魚で編集すると勝手に全角に書き換えられちゃうよ、と言う仕様でいこう。
いや、つまり今まで通りかわらないってことだが。
EUCのために作ったテーブルをそのまま使って変換すればバッチリだろう。