In addition to @jrb's answer, in Vim, the character encoding of the file is detected based on the fileencodings option. (note the 's' at end of fileencodings)
I.e. on Windows, the default value for the
fileencodings option is
ucs-bom, which means:
check if BOM exists at the beginning of the file.
If BOM exists, then 'read the character encoding of the file out of BOM'.
If BOM doesn't exist (and in this case that would also mean that all character encodings specified in the
fileencodings option failed to match), then read the file with the character encoding specified in the
encoding option. The default character encoding for the
encoding option is:
latin1. Now, because
latin1 is the one byte length character encoding, all bytes in the file are valid
latin1 characters (even the
^@ that you're seeing*).
^@ is the newline character in the Vim's buffer text, not the Nul character.
The proper way to read the file is to specify the character encoding manually as UTF-16 (as it looks like UTF-16 is the proper char encoding in this case).