modelineでfenc設定しても意味なしじゃなかったっけ?
というわけで書いてみた。でもあんまり誤認識しないから必要ない気もするけど。
本当はcharconvertでやるのがスマートかな…。

autocmd BufReadPost * nested call s:CheckEncodingDeclaration()
function! s:CheckEncodingDeclaration()
  if !exists('b:encdec_checked') || b:encdec_checked != bufname('%')
    let b:encdec_checked = bufname('%')
    let i = 1
    while i <= &modelines && i <= line('$')
      let enc = matchstr(getline(i), 'coding[=:]\s*\zs[-_[:alnum:]]\+\ze')
      if enc != '' && enc != &fileencoding
        execute 'edit ++enc=' . enc
        return
      endif
      let i = i + 1
    endwhile
  endif
endfunction