Các tệp văn bản có lưu trữ phương thức mã hóa của chúng để giải mã sau này không?


19
  1. 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?
  2. 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 đó?

Nếu đó là một tệp văn bản gốc, thì nó không lưu trữ bất cứ điều gì về mã hóa. Tôi không thể nói cho văn bản phong phú, mặc dù.
Wuffers

Vâng, tôi đang nói về văn bản gốc.
Tim

Câu trả lời:


19

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ụ vimhoạ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.


Vậy làm thế nào để file -bilàm việc nếu BOM không được sử dụng?
Geezer cũ

@OldGeezer: filecó nhiều phương pháp để xác định loại tệp và mã hóa. Hầu hết, nó tìm kiếm các chuỗi hoặc chuỗi byte xác nhận trong tệp. Nếu bạn muốn biết thêm thông tin cụ thể, có lẽ bạn sẽ phải đọc nguồn. Hoặc chỉ hỏi một câu hỏi riêng biệt :-).
sleske

@OldGeezer: Và BTW, filekhông thể phát hiện đáng tin cậy hầu hết các mã hóa văn bản (vì điều đó rất khó). Trang man có một số thông tin về phát hiện bộ ký tự - filehầu hết chỉ nhận ra ASCII, UTF-8/16, EBCDIC và ISO-8859-x. Ví dụ: một tệp được mã hóa trong KOI8-R được báo cáo là "ISO-8859-1".
sleske

4

Các tệp văn bản thuần túy không lưu trữ bất kỳ thông tin nào về mã hóa của chúng. Người xem xác định nó dựa trên mã hóa ký tự bạn đã đặt cho nó. Nó không thể tự xác định nó, vì tất cả đều giống với máy tính.


Vì vậy, người xem văn bản không thể phân biệt giữa các phương pháp mã hóa cho các tệp văn bản. Nếu một trình xem văn bản được cung cấp một tệp đối tượng / tệp thực thi, nó có thể nói rằng nó không phải là một tệp văn bản không?
Tim

Không, nó không thể. Nó sẽ cố gắng mở nó như một tập tin văn bản. Và tất nhiên sẽ hiển thị một loạt các công cụ bị cắt xén. Cách duy nhất bạn có thể khiến nó phân biệt giữa các bảng mã là nếu bạn thay đổi mã hóa theo cách thủ công.
Wuffers

@Tim: Hầu hết người xem văn bản sử dụng một heuristic để kiểm tra xem một cái gì đó là một tệp văn bản. Nếu tệp có nhiều ký tự không in được, nhiều người xem và biên tập viên sẽ cảnh báo (ví dụ lessgreptrên Unix / Linux làm điều này).
sleske
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.