I got benchmark result of this patch.

---------------------------
scriptencoding utf-8

function! s:nr2byte(nr)
  if a:nr < 0x80
    return nr2char(a:nr)
  elseif a:nr < 0x800
    return nr2char(a:nr/64+192).nr2char(a:nr%64+128)
  else
    return 
nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128)
  endif
endfunction

function! s:nr2enc_char(charcode)
  if &encoding == 'utf-8'
    return nr2char(a:charcode)
  endif
  let char = s:nr2byte(a:charcode)
  if strlen(char) > 1
    let iconv_str = iconv(char, 'utf-8', &encoding)
    if iconv_str != ""
      let char = strtrans(iconv_str)
    endif
  endif
  return char
endfunction

let s = repeat("helloworld&#19990;&#30028;", 20000)
let start = reltime()
let text1 = substitute(s, '&#\(\d\+\);','\=s:nr2enc_char(submatch(1))', 'g')
let time1 = reltimestr(reltime(start))
let start = reltime()
let text2 = iconv(substitute(s, '&#\(\d\+\);','\=nr2char(submatch(1), 1)', 
'g'), "utf-8", &encoding)
let time2 = reltimestr(reltime(start))
---------------------------

s:nr2enc_char: 18.999306
nr2char: 15.942552

of course, nr2char bits faster.

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui