curl POST一个url,收到的返回里有中文 内容为: {“result”:"\u601d\u60f3"}
如何才能解析成期望的字符串呢? {“result”:“思想”}
curl POST一个url,收到的返回里有中文 内容为: {“result”:"\u601d\u60f3"}
如何才能解析成期望的字符串呢? {“result”:“思想”}
|xargs echo 试一下
找到段代码,改了改能用…
(unicode-unescape-string str)
(defun unicode-char (code) (decode-char 'ucs code))
(defun unicode-unescape-string (str)
(with-temp-buffer
(insert str)
(unicode-unescape-region (point-min) (point-max))
(buffer-string)
)
)
(defun unicode-unescape-region (start end)
"指定した範囲のUnicodeエスケープ文字(\\uXXXX)をデコードする."
(interactive "*r")
(save-restriction
(narrow-to-region start end)
(goto-char (point-min))
(while (re-search-forward "\\\\u\\([[:xdigit:]]\\{4\\}\\)" nil t)
(replace-match (string (unicode-char
(string-to-number (match-string 1) 16)))
nil t))))
来源: http://lisperblog.blogspot.com/2010/09/emacsunicode.html
谢谢!这个service不返回utf-8真是伤心,加了request head也不返回
应该用不着解析。Emacs Lisp 字符串正好支持这种写法:
"\u601d\u60f3"
;; => "思想"
学到了,如果要编码成这种写法该怎么做呢?
这个编码是json标准定义的,如果支持utf8编码的字符串处理库,不需要额外的处理
这个字符串,写成elisp的string的话,是这样的:
"\\u601d\\u60f3"
哦,刚刚也想到会这样,这样可以二次经过 Elisp Reader:
(read (concat "\"" "\\u601d\\u60f3" "\""))
;; => "思想"
这种方法不见得就比你自己找的方法好,用你自己觉得好的方法。
真的NICE!!!!
正则太多转义字符了,看得心累
直接用 (rx ...)
会好点
(rxt-elisp-to-rx "\\\\u\\([[:xdigit:]]\\{4\\}\\)")
;; (seq "\\u"
;; (submatch
;; (= 4 xdigit)))
(equal "\\\\u\\([[:xdigit:]]\\{4\\}\\)"
(rx (seq "\\u" (submatch (= 4 xdigit)))))
;; t