You have to say (decode-coding-region (point) (point-max) 'utf-8) first for that to work. I.e., (url-retrieve "https://dict.youdao.com/suggest?q=accumulate&le=eng&num=80&doctype=json" (lambda (_status) (goto-char (1+ url-http-end-of-headers)) (let ((buf (current-buffer)) (end (1+ url-http-end-of-headers))) (with-temp-buffer (insert-buffer-substring buf end) (goto-char (point-min)) (let ((j (json-read))) (erase-buffer) (json-insert j) (write-region (point-min) (point-max) "/tmp/acc2.json")))))) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no