如何在Emacs Lisp中"解码"一个字符串?

Ken*_*Ken 22 url emacs elisp urlencode urldecode

我有一个像"foo%20bar"的字符串,我想要"foo bar".

我知道必须有一个内置函数来解码Emacs Lisp中的URL编码字符串(查询字符串),但对于我的生活,我今天无法在我的lisp /文件夹或google中找到它.

有谁记得它叫什么?

hua*_*uan 42

url-unhex-string
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要 (require 'url-util) - 实际上,这通常是通过加载其他一些代码来完成的,但依赖它肯定不好。 (2认同)

db4*_*48x 24

就我而言,我需要以交互方式进行此操作.以前的答案给了我正确的调用函数,然后只需要将它包装一点就可以使它们具有交互性:

(defun func-region (start end func)
  "run a function over the region between START and END in current buffer."
  (save-excursion
    (let ((text (delete-and-extract-region start end)))
      (insert (funcall func text)))))

(defun hex-region (start end)
  "urlencode the region between START and END in current buffer."
  (interactive "r")
  (func-region start end #'url-hexify-string))

(defun unhex-region (start end)
  "de-urlencode the region between START and END in current buffer."
  (interactive "r")
  (func-region start end #'url-unhex-string))
Run Code Online (Sandbox Code Playgroud)

添加盐,我的意思是根据口味绑定键.


Tör*_*bor 11

Emacs附带了一个URL库,它提供了一堆URL解析功能 - 正如huaiyuanCharlie Martin已经指出的那样.这是一个小例子,它可以让你知道如何使用它:

(let ((url "http://www.google.hu/search?q=elisp+decode+url&btnG=Google+keres%E9s&meta="))
  ;; Return list of arguments and values
  (url-parse-query-string
   ;; Decode hexas
   (url-unhex-string
    ;; Retrieve argument list
    (url-filename
     ;; Parse URL, return a struct
     (url-generic-parse-url url)))))
=> (("meta" "") ("btnG" "Google+keresés") ("/search?q" "elisp+decode+url"))
Run Code Online (Sandbox Code Playgroud)

我认为是更好地依靠它不是org-mode因为它解析URL它的主要目的.


Der*_*ger 6

org-link-unescape为非常简单的情况做这项工作......w3m-url-decode-string更好,但它不是内置的,而且我在本地拥有的版本不适用于 Emacs 23。

  • `url-unhex-string` 做你想要的。 (15认同)