Ngoài câu trả lời của @ jrb, trong Vim, mã hóa ký tự của tệp được phát hiện dựa trên tùy chọn tệp khởi tạo. (lưu ý 's' ở cuối tập tin)
Tức là trên Windows, giá trị mặc định cho fileencodingstùy chọn là ucs-bom, có nghĩa là:
kiểm tra nếu BOM tồn tại ở đầu tập tin.
Nếu BOM tồn tại, thì 'đọc mã hóa ký tự của tệp ra khỏi BOM'.
Nếu BOM không tồn tại (và trong trường hợp này cũng có nghĩa là tất cả các mã hóa ký tự được chỉ định trong fileencodingstùy chọn không khớp), thì hãy đọc tệp có mã hóa ký tự được chỉ định trong encodingtùy chọn. Mã hóa ký tự mặc định cho encodingtùy chọn là : latin1. Bây giờ, vì latin1là mã hóa ký tự có độ dài một byte , tất cả các byte trong tệp là các latin1ký tự hợp lệ (ngay cả Nulký tự ^@mà bạn đang nhìn thấy *).
* - thực ra, ^@là ký tự dòng mới trong văn bản bộ đệm của Vim, không phải ký tự Nul.
Cách thích hợp để đọc tệp là chỉ định mã hóa ký tự theo cách thủ công là UTF-16 (vì có vẻ như UTF-16 là mã hóa char thích hợp trong trường hợp này).