« 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 »

コメント

この記事へのコメントは終了しました。

トラックバック


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

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