2014-01-12 80 views
7

我正在嘗試獲取一串包含文字字符\u009e的字符串,我想將這些字符轉換爲其關聯的單個Unicode字符,在本例中爲é將轉義代碼點轉換爲Unicode字符

我用捲曲或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 
+0

參見:** [如何將\ u7f51更改爲vim中的常用字符?](http://stackoverflow.com/questio ns/10266076)** – hippietrail

回答

6

這條線適用於你的例子:

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

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

可以做相反的事情嗎? é - > \ u00e9 – adelarsq

+1

@adelarsq是的,這是可能的。使用'printf'和'char2nr'函數 – Kent

相關問題