Além da resposta do @ jrb, no Vim, a codificação de caracteres do arquivo é detectada com base na opção codificação de arquivos. (observe os 's' no final das codificações de arquivo)
Ou seja, no Windows, o valor padrão para a fileencodings
opção é ucs-bom
, o que significa:
verifique se a lista técnica existe no início do arquivo.
Se a lista técnica existir, 'leia a codificação de caracteres do arquivo fora da lista técnica'.
Se a BOM não existir (e, nesse caso, isso também significaria que todas as codificações de caracteres especificadas na fileencodings
opção falharam em corresponder), leia o arquivo com a codificação de caracteres especificada na encoding
opção. A codificação de caracteres padrão para a encoding
opção é: latin1
. Agora, como latin1
é a codificação de caracteres de um byte , todos os bytes no arquivo são latin1
caracteres válidos (mesmo o Nul
caractere ^@
que você está vendo *).
* - na verdade, ^@
é o caractere de nova linha no texto do buffer do Vim, não o caractere Nul.
A maneira correta de ler o arquivo é especificar a codificação de caracteres manualmente como UTF-16 (pois parece que UTF-16 é a codificação char apropriada nesse caso).