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ってのがナンセンスか。
と言うことで煮え切りませんが、とりあえず一歩前進したということで
| 固定リンク
この記事へのコメントは終了しました。
コメント