将转义的代码点转换为unicode字符

Tom*_*ann 7 vim utf-8 iconv

我试图获取一个包含字符串的JSON块,\u009e我希望将这些字符转换为其关联的单个unicode字符,在本例中é.

我使用curl或wget下载json,它看起来像:

{ "name": "Kitsun\u00e9" }
Run Code Online (Sandbox Code Playgroud)

并且需要在Vim中将其翻译为:

{ "name": "Kitsuné" }
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用Vim的iconv,但它不会将字符串作为单个字符进行评估,只返回输入.

let code = '\u00e9'
echo iconv(code, "UTF-8", "UTF-8")
" Prints \u00e9
Run Code Online (Sandbox Code Playgroud)

我想最终使用类似的东西

%s;\\u[0-9abcdef]*;\=iconv(submatch(0),"UTF-8", "UTF-8");g
Run Code Online (Sandbox Code Playgroud)

Ken*_*ent 6

这行适用于您的示例:

s#\\u[0-9a-f]*#\=eval('"'.submatch(0).'"')#
Run Code Online (Sandbox Code Playgroud)

要么

s#\v\\u([0-9a-f]{4})#\=nr2char(str2nr(submatch(1),16))#
Run Code Online (Sandbox Code Playgroud)