В дополнение к ответу @ jrb в Vim определяется кодировка символов файла на основе опции fileencodings. (обратите внимание на 's' в конце кодирования файла)
Т.е. в Windows значением по умолчанию для опции fileencodings
является ucs-bom
, что означает:
проверьте, существует ли спецификация в начале файла.
Если спецификация существует, тогда «прочитайте кодировку символов файла из спецификации».
Если спецификация не существует (и в этом случае это также означает, что все кодировки символов, указанные в параметре fileencodings
не совпадают), то прочитайте файл с кодировкой символов, указанной в параметре encoding
. Кодировка символов по умолчанию для опции encoding
: latin1
. Теперь, поскольку latin1
является однобайтовой кодировкой символов, все байты в файле являются действительными latin1
символами (даже Nul
символ ^@
который вы видите *).
* - на самом деле, ^@
- это символ новой строки в тексте буфера Vim, а не символ Nul.
Правильный способ чтения файла - указать кодировку символов вручную как UTF-16 (в этом случае UTF-16 выглядит как правильная кодировка символов).