Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@takeshy
Created July 21, 2011 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takeshy/1096367 to your computer and use it in GitHub Desktop.
Save takeshy/1096367 to your computer and use it in GitHub Desktop.
url unescape for vim
function GetCode(pos,str)
let s:pos = a:pos
let s:n_code = str2nr(strpart(a:str,s:pos,2),16)
let s:pos = s:pos + 2
"in a certain sns
"if s:n_code == 37
" let s:n_code = str2nr(strpart(s:line,s:pos,2),16)
" let s:pos = s:pos + 2
"endif
return [s:pos,s:n_code]
endfunction
function Unescape()
let s:line = getline(".")
let s:out = ""
let s:pos = 0
while s:pos < strlen(s:line)
let s:moji =strpart(s:line,s:pos,1)
let s:pos = s:pos + 1
if s:moji == "%"
let s:rc = GetCode(s:pos,s:line)
let s:pos = s:rc[0]
let s:f_code = s:rc[1]
if s:f_code >= 0xe0
"disregard %
let s:pos = s:pos + 1
let s:rc = GetCode(s:pos,s:line)
let s:pos = s:rc[0]
let s:s_code = s:rc[1]
"disregard %
let s:pos = s:pos + 1
let s:rc = GetCode(s:pos,s:line)
let s:pos = s:rc[0]
let s:t_code = s:rc[1]
let s:out = s:out . nr2char(float2nr((s:f_code - 0xe0) * pow(2,12) + (s:s_code - 0x80) * pow(2,6) + (s:t_code - 0x80)))
else
if s:n_code >= 0xc0
"disregard %
let s:pos = s:pos + 1
let s:rc = GetCode(s:pos,s:line)
let s:pos = s:rc[0]
let s:s_code = s:rc[1]
let s:out = s:out . nr2char(float2nr((s:f_code - 0xc0) * pow(2,6) + (s:s_code - 0x80)))
else
let s:out = s:out . nr2char(s:n_code)
endif
endif
else
let s:out = s:out . s:moji
endif
endwhile
echo s:out
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment