Tôi đã tự hỏi nếu một số tệp văn bản lưu trữ phương thức mã hóa của họ dọc theo nội dung văn bản của họ để giải mã sau này?
Câu trả lời của Mark Szymanski là chính xác - không có thông tin mã hóa rõ ràng trong tệp văn bản thuần túy - đó là định nghĩa của "tệp văn bản thuần túy", "đơn giản" đề cập đến thực tế là không có dữ liệu meta trong tệp.
Tuy nhiên, một số ứng dụng sẽ đặt dấu thứ tự byte (BOM) trong các tệp văn bản được mã hóa dưới dạng UTF-16 hoặc UTF-32 / UCS-4. BOM không thực sự có nghĩa là chỉ ra mã hóa (nó chỉ ra thứ tự byte, như tên gọi), nhưng nhiều ứng dụng sẽ sử dụng sự hiện diện của BOM để nhận dạng UTF-16 / UTF-32, do đó, nó đóng vai trò là chỉ báo mã hóa.
Hoặc đó là công việc của người xem văn bản để đoán phương thức mã hóa cho một tệp văn bản nhất định và việc đoán có thể không phải lúc nào cũng đúng? Nếu có, làm thế nào một người xem văn bản đoán điều đó?
Có, người xem văn bản chỉ có thể đoán. Nó thường sử dụng một số heuristic:
- Trong một số mã hóa (đáng chú ý là trong UTF-8), không phải tất cả các chuỗi byte đều hợp lệ. Vì vậy, một ứng dụng chỉ có thể cố gắng giải mã tệp là UTF-8. Nếu thành công, tệp có thể là UTF-8; nếu nó thất bại bằng cách tìm một chuỗi byte không hợp lệ, thì không. Đây là cách ví dụ
vim
hoạt động theo mặc định: Trước tiên, nó sẽ cố gắng sử dụng UTF-8 khi đọc tệp; nếu thất bại, nó sẽ rơi trở lại ISO-8859-1.
- Trong hầu hết các mã hóa 8 bit cũ hơn, bất kỳ chuỗi byte nào đều hợp lệ. Trong trường hợp đó, đôi khi bạn có thể đoán mã hóa bằng cách nhìn vào biểu đồ byte (tần số của các chuỗi byte / byte khác nhau). Internet Explorer đã từng làm điều này để "đoán" mã hóa của một trang. Tuy nhiên, điều này rất dễ bị lỗi, vì vậy rất ít chương trình làm điều này.
Trong hầu hết các trường hợp, một chương trình phải được thông báo rõ ràng mã hóa của tệp văn bản là gì, nếu không nó sẽ không thể đọc chính xác.