by shigemk2

当面は技術的なことしか書かない

memo: GET website including non-ASCII in request.el

概要

request.elで、日本語とかのASCIIじゃない文字列が混ざったページに対してGETすると、curlの結果が文字化けする。

(require 'request)
(request "http://rubikitch.com/"
         :parser 'buffer-string
         :complete (function*
                    (lambda (&key data &allow-other-keys)
                      (switch-to-buffer "*request-result*")
                      (erase-buffer)
                      (insert data))))

理由

このプルリク。elispについて、サブプロセスでcurlを実行しているけど、実行するバッファのエンコードが binary になっている。 Win/Mac/Linux全部に対応しないといけないライブラリなので、binaryにすることで動かなくなるのを回避しているのだと思う。

このプルリクの修正が直接の原因。 github.com

でも、binaryにするとASCIIじゃない、具体的には日本語のサイトでGETすると文字化けする。 github.com

対策

こう書いて、dataのエンコードをutf-8とかにする。

(require 'request)
(request "http://rubikitch.com/"
         :parser 'buffer-string
         :complete (function*
                    (lambda (&key data &allow-other-keys)
                      (switch-to-buffer "*request-result*")
                      (erase-buffer)
                      (insert (decode-coding-string data 'utf-8)))))

ってあるけど、正直知らないとわからないから、ドキュメントやテストには明記したいね。