« mt.el with 日本語 | トップページ | emacs用 weblog client »

2010年1月30日 (土)

mt.el で editができるようになった。

前回の記事では 失敗していた既存postの editができるようになりました。 例によってgitHubから どうぞ。

結構悩みましたが、原因は emacsにおける unibyte-string と multibyte-stringの相互変換にありました。

mt.el が xml-rpc.el 経由で使う url.el という libraryでは、 扱うデータは unibyte-stringでなくてはいけないという policyのようです。 これはurl-http.el のソースにも書いてある。

しかし xml-rpc.el は、そこんとこあんまり真面目に考えている風がない。 そもそも文字コードなんか 8bitをまるまる渡せばいいじゃん、ぐらいの 西欧お気楽主義にしか見えない。

そこをいじるのも面倒で、自分は xml-rpc.el も unibyte-stringだけを 受け付けると見なし、xml-rpc.el に渡す前に UTF-8 で encodingするように しました。しかるに、そこに穴があって、一部の文字列が multibyteで 残っていたのです。

xml-rpc.el で、引数をまとめて一つの XML文字列にするとき、 一つでも multibyte stringが残っていると concatするときに 'make-string-multibyte' で全部変換されちゃうらしいっす。 そして前述の url-http-create-request 関数内で 'string-as-unibyte' で変換しなおすと余計な byteがついて UTF-8としてただしくないものに なってしまうという落ちでした。

で、今回はかなり場当たり的に xml-rpc.el に mutlibyte-stringを 渡してるところを塞いだけど、これだとまだ穴がありそうだなあ。

本当は xml-rpc.el で multibyte-stringの扱いをどうするか policyを ちゃんと決めなきゃいけないんだろうけど。 unibyteしか扱えないというのは制限としてきつそうな気がする。 でも XML RPC で blob的なものを使いたかったりするとそういう APIにしとくしかしょうがないかなあ。 いや、XMLで blobってのがナンセンスか。

と言うことで煮え切りませんが、とりあえず一歩前進したということで

|

« mt.el with 日本語 | トップページ | emacs用 weblog client »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/395951/33188672

この記事へのトラックバック一覧です: mt.el で editができるようになった。:

« mt.el with 日本語 | トップページ | emacs用 weblog client »