emacs显示http结果到buffer时异常

今天用elisp写了一个http的ajax调用:

(defun ab/ajax-build-status (arg)
  "ajax pelpa building status"
  (interactive "P")
  (let* ((pelpa-build-status-url "http://pelpa.popkit.org/elpa/build/ajaxBuildStatus.json")
         (pelpa-buffer-name "*pelpa*")
         (pelpa-buffer (get-buffer-create pelpa-buffer-name))
         (buffer (url-retrieve-synchronously pelpa-build-status-url))
         (headers nil)
         (handle nil))
    (if (not buffer)
        (error "请求%s失败,请重试!" pelpa-build-status-url))
    (with-current-buffer buffer
      (unless (= 200 url-http-response-status)
        (error "Http error %s fetching %s" url-http-response-status pelpa-build-status-url))
      (message "buffer name%s" (buffer-name))
      (setq headers (buffer-string))
      
      (with-current-buffer pelpa-buffer
        (setq-default major-mode 'text-mode)
        (set-buffer-major-mode pelpa-buffer)
        (erase-buffer)     ;; 先清空原有的内容
        (insert headers))
      )))

发现返回结果的buffer,中文显示不正常:

Paste_Image.png

出现了\345\274\200\345\247\213\344\272\216..
原因是没有将字符串进行decode(调用decode-coding-string函数)
将上面的(insert headers)替换为如下语句就ok了:

(insert (decode-coding-string headers 'utf-8))

显示正常如下:

Paste_Image.png

后来发现有人遇到过,其实url.el应该按照http的content-type类型来decode才对:
http://emacs.stackexchange.com/questions/4100/why-must-i-set-and-reset-buffer-multibyte-to-correctly-view-multibyte-buffers

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容