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 fileencodings
tù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 fileencodings
tùy chọn không khớp), thì hãy đọc tệp có mã hóa ký tự được chỉ định trong encoding
tùy chọn. Mã hóa ký tự mặc định cho encoding
tùy chọn là : latin1
. Bây giờ, vì latin1
là mã hóa ký tự có độ dài một byte , tất cả các byte trong tệp là các latin1
ký tự hợp lệ (ngay cả Nul
ký 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).