Преобразование экранированной кодовой точки в символ Юникода

Я пытаюсь взять фрагмент JSON, в котором есть строки, содержащие буквенные символы \u009e, и я хотел бы преобразовать эти символы в связанный с ним одиночный символ юникода, в данном случае é.

Я использую curl или wget для загрузки json, который выглядит так:

{ "name": "Kitsun\u00e9" }

И нужно перевести это в Vim на:

{ "name": "Kitsuné" }

Моей первой мыслью было использовать iconv Vim, но он не оценивает строку как один символ и просто возвращает ввод.

let code = '\u00e9'
echo iconv(code, "UTF-8", "UTF-8")
" Prints \u00e9

Я хочу в конечном итоге использовать что-то вроде

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

person Tom Cammann    schedule 12.01.2014    source источник
comment
См. также: Как изменить 网 на общий символ в vim?   -  person hippietrail    schedule 18.02.2014


Ответы (1)


эта строка работает для вашего примера:

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

or

s#\v\\u([0-9a-f]{4})#\=nr2char(str2nr(submatch(1),16))#
person Kent    schedule 12.01.2014
comment
Можно ли сделать обратное? é --› >>9 - person adelarsq; 01.10.2015
comment
@adelarsq да, это возможно. используйте функцию printf и char2nr - person Kent; 01.10.2015