Vim 将转义码点转换为unicode字符

Vim 将转义码点转换为unicode字符,vim,utf-8,iconv,Vim,Utf 8,Iconv,我试图获取一个JSON块,该块包含包含文字字符\u009e的字符串,我想将这些字符转换为与其关联的单个unicode字符,在本例中为é 我使用curl或wget下载json,如下所示: { "name": "Kitsun\u00e9" } 需要在Vim中将其转换为: { "name": "Kitsuné" } 我的第一个想法是使用Vim的iconv,但它不会将字符串作为单个字符进行计算,而是返回输入 let code = '\u00e9' echo iconv(code, "UTF-8",

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

我使用curl或wget下载json,如下所示:

{ "name": "Kitsun\u00e9" }
需要在Vim中将其转换为:

{ "name": "Kitsuné" }
我的第一个想法是使用Vim的iconv,但它不会将字符串作为单个字符进行计算,而是返回输入

let code = '\u00e9'
echo iconv(code, "UTF-8", "UTF-8")
" Prints \u00e9
我想最终使用类似于

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

这一行适用于您的示例:

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


另请参见:是否可以做相反的操作?é --> \u00e9@adelarsq是的,这是可能的。使用
printf
char2nr
功能
s#\v\\u([0-9a-f]{4})#\=nr2char(str2nr(submatch(1),16))#