Emacs25.1にしたせい(?)か org2blog でpublish時に "error in process sentinel: url-http-create-request: Multibyte text in HTTP request: POST /????/xmlrpc.php HTTP/1.1 …" とか言われて困ったのだけど xml-rpc-request の encode-coding-region の部分がダメっぽい。 xml-rpc-allow-unicode-string が t の時は encode-coding-string を使うようにしたらうまく行った。
xml-rpc.el:
" encoding=\"UTF-8\"?>\n" (with-temp-buffer (xml-print xml) - (when xml-rpc-allow-unicode-string - (encode-coding-region - (point-min) (point-max) 'utf-8)) - (buffer-string)) + (if xml-rpc-allow-unicode-string + (encode-coding-string (buffer-string) 'utf-8) + (buffer-string))) "\n")) (url-mime-charset-string "utf-8;q=1, iso-8859-1;q=0.5") (url-request-coding-system xml-rpc-use-coding-system)
Emacs25からurl-http-系でリクエストを送るときはユニバイト文字列でないとエラーになるようになった(https://github.com/emacs-mirror/emacs/blob/master/etc/NEWS.25#L1306)。 RC1のときはユニバイト文字列を指定してもエラーになるバグがあったようなのだけど、今回のはそれではないようだ。
原因は以下の挙動の違いらしい。
(multibyte-string-p (with-temp-buffer (insert "こんにちは") (encode-coding-region (point-min) (point-max) 'utf-8) (buffer-string))) ;; => t
(multibyte-string-p (encode-coding-string "こんにちは" 'utf-8)) ;; => nil
encode-coding-regionの説明には「符号化結果は『生のバイト』であるが、 マルチバイトであったバッファはマルチバイトのままである。」とあるので、それが関係しているのかもしれない。