Câu trả lời:
Cài đặt mã hóa tệp hiển thị mã hóa bộ đệm hiện tại:
:set fileencoding
fileencoding=utf8
Thực sự không có cách phổ biến nào để xác định mã hóa của tệp văn bản gốc, vì thông tin đó không được lưu trong chính tệp đó - ngoại trừ Tệp UTF-8 nơi bạn có một BOM được gọi là Mã hóa. Đây là lý do tại sao các tệp xml và html có siêu dữ liệu bảng mã.
Bạn có thể thực thi một mã hóa cụ thể với cài đặt 'mã hóa'. Xem :help encoding
và :help fileencoding
trong Vim để biết cách trình soạn thảo xử lý các cài đặt này. Bạn cũng có thể thêm một số cài đặt mã hóa tệp vào vimrc của mình để vim thử phát hiện dựa trên các cài đặt được liệt kê.
Lưu ý rằng mã hóa của tệp không được nêu rõ ràng ở bất kỳ đâu trong tệp. Do đó, VIM và các ứng dụng khác phải đoán mã hóa. Cách thức hợp quy để thực hiện việc này là với chardet
ứng dụng, có thể được chạy từ bên trong VIM như sau:
:!chardet %
Câu trả lời được cung cấp bởi jtimberman cho bạn thấy mã hóa của bộ đệm hiện tại có thể không phải là mã hóa giống như tệp trên đĩa. Do đó, bạn sẽ nhận thấy rằng chardet
đôi khi sẽ hiển thị một mã hóa khác với VIM, đặc biệt nếu bạn đã cấu hình VIM để luôn sử dụng một mã hóa cụ thể (ví dụ UTF-8).
Điều thú vị chardet
là nó mang lại điểm tin cậy cho dự đoán của nó, trong khi VIM có thể (và thường là) sai về việc đoán mã hóa nếu không có nhiều ký tự trên \ x7F (ASCII 127). Chẳng hạn, việc thêm một א
tập tin vào một đoạn mã PHP dài khiến người ta chardet
nghĩ rằng tập tin đó ISO-8859-2
có độ tin cậy là 0,72, trong khi việc thêm cụm từ dài hơn một chút שלום, עולם!
sẽ cho UTF-8 với điểm tin cậy là 0,99. Trong cả hai trường hợp, set fileencoding?
cho thấy UTF-8
không phải vì tệp trên đĩa là UTF-8, mà vì VIM được cấu hình để sử dụng UTF-8 trong nội bộ.
chardet <file>
. Tuy nhiên, đề nghị tốt.
Tôi thấy rằng: https://vim.fandom.com/wiki/Reloading_a_file_USE_a_different_encoding
Bạn có thể tải lại một tệp bằng mã hóa khác nếu Vim không thể phát hiện mã hóa chính xác:
:e ++enc=<encoding>
nơi encoding
có thểcp850, ISO-8859-1, UTF-8, ...
Bạn có thể sử dụng file yourfilename
để tìm mã hóa hoặc chardetect
(được cung cấp bởi python-chardet
hoặc uchardet
tùy thuộc vào bản phân phối Linux của bạn) theo đề xuất của dotancohen.