Apakah file teks menyimpan metode encoding mereka untuk decoding nanti?

19
  1. Saya bertanya-tanya apakah beberapa file teks menyimpan metode encoding mereka di sepanjang konten teks mereka untuk decoding nanti?
  2. Atau apakah tugas penampil teks untuk menebak metode pengkodean untuk file teks yang diberikan, dan menebak itu mungkin tidak selalu benar? Jika ya, bagaimana penampil teks dapat menebaknya?
Tim
sumber
Jika itu file plaintext, maka file itu tidak menyimpan apa pun tentang penyandian. Tapi saya tidak bisa mengatakan untuk teks kaya.
Wuffers
Ya, saya berbicara tentang plaintext.
Tim

Jawaban:

19

Saya bertanya-tanya apakah beberapa file teks menyimpan metode encoding mereka di sepanjang konten teks mereka untuk decoding nanti?

Jawaban Mark Szymanski benar - tidak ada informasi pengkodean eksplisit dalam file teks biasa - itulah definisi "file teks biasa", "polos" merujuk pada kenyataan bahwa tidak ada meta-data dalam file.

Namun, beberapa aplikasi akan menempatkan tanda byte-order (BOM) dalam file teks yang dikodekan sebagai UTF-16 atau UTF-32 / UCS-4. BOM tidak benar-benar dimaksudkan untuk menunjukkan pengkodean (itu menunjukkan urutan byte, seperti namanya), tetapi banyak aplikasi akan menggunakan keberadaan BOM untuk mengenali UTF-16 / UTF-32, sehingga berfungsi sebagai indikator pengkodean.

Atau apakah tugas penampil teks untuk menebak metode pengkodean untuk file teks yang diberikan, dan menebak itu mungkin tidak selalu benar? Jika ya, bagaimana penampil teks dapat menebaknya?

Ya, penampil teks hanya bisa menebak. Biasanya menggunakan beberapa heuristik:

  • Dalam beberapa pengkodean (terutama dalam UTF-8) tidak semua urutan byte valid. Jadi suatu aplikasi dapat mencoba memecahkan kode file tersebut sebagai UTF-8. Jika berhasil, file tersebut mungkin UTF-8; jika gagal dengan menemukan urutan byte yang tidak valid, itu tidak. Ini adalah cara mis vimberfungsi secara default: Ini pertama-tama akan mencoba menggunakan UTF-8 saat membaca file; jika itu gagal, ia kembali ke ISO-8859-1.
  • Dalam kebanyakan pengkodean 8-bit yang lebih lama, urutan byte apa pun valid. Dalam hal ini, Anda kadang-kadang dapat menebak pengodean dengan melihat histogram byte (frekuensi urutan byte / byte yang berbeda). Internet Explorer dulu melakukan ini untuk "menebak" penyandian halaman. Namun, ini sangat rawan kesalahan, sehingga beberapa program melakukan ini.

Dalam kebanyakan kasus, suatu program harus secara eksplisit diberi tahu apa pengkodean file teks, jika tidak maka tidak akan dapat membacanya dengan benar.

sleske
sumber
Jadi bagaimana cara file -bikerjanya jika BOM tidak digunakan?
Pak Tua
@ OldGeezer: filememiliki berbagai heuristik untuk menentukan jenis file dan pengodean. Sebagian besar, mencari string string atau byte byte dalam file. Jika Anda menginginkan informasi yang lebih spesifik, Anda mungkin harus membaca sumbernya. Atau cukup ajukan pertanyaan terpisah :-).
sleske
@ OldGeezer: Dan BTW, filetidak dapat diandalkan mendeteksi sebagian besar penyandian teks (karena itu sangat sulit). Halaman manual memiliki beberapa informasi tentang deteksi kumpulan karakter - filekebanyakan hanya mengenali ASCII, UTF-8/16, EBCDIC, dan ISO-8859-x. Misalnya, file yang disandikan dalam KOI8-R dilaporkan sebagai "ISO-8859-1".
sleske
4

File teks biasa tidak menyimpan informasi apa pun tentang penyandiannya. Penampil menentukannya berdasarkan pengkodean karakter yang telah Anda tetapkan untuk itu. Itu tidak dapat menentukan dengan sendirinya, karena itu semua sama dengan komputer.

Wuffers
sumber
Jadi pemirsa teks tidak dapat membedakan antara metode pengkodean untuk file teks. Jika penampil teks diberi objek / file yang dapat dieksekusi, apakah ia dapat mengatakan bahwa itu bukan file teks?
Tim
Tidak, itu tidak bisa. Ini akan mencoba membukanya seperti file teks. Dan tentu saja akan menampilkan banyak barang rusak. Satu-satunya cara Anda mendapatkannya untuk membedakan antara penyandian adalah jika Anda mengubah penyandian secara manual.
Wuffers
@Tim: Sebagian besar pemirsa teks menggunakan heuristik untuk memeriksa apakah ada file teks. Jika file memiliki banyak karakter yang tidak dapat dicetak, banyak pemirsa dan editor akan memperingatkan (mis. lessDan grepdi Unix / Linux melakukan ini).
sleske