Чи зберігають текстові файли свій метод кодування для подальшого декодування?


19
  1. Мені було цікаво, чи зберігають деякі текстові файли метод кодування разом із текстовим вмістом для подальшого декодування?
  2. Або завдання глядача тексту вгадати спосіб кодування для певного текстового файлу, і вгадування може не завжди бути правильним? Якщо так, то як це переглядає текст?

Якщо це файл простого тексту, то він нічого не зберігає про кодування. Я не можу сказати за насичений текст.
Wuffers

Так, я кажу про непростий текст.
Тім

Відповіді:


19

Мені було цікаво, чи зберігають деякі текстові файли метод кодування разом із текстовим вмістом для подальшого декодування?

Відповідь Марка Шиманського правильна - у простому текстовому файлі немає явної інформації про кодування - це визначення "простого текстового файлу", "звичайний" посилається на те, що у файлі немає метаданих.

Однак деякі програми розміщують позначку порядку байтів (BOM) у текстових файлах, кодованих як UTF-16 або UTF-32 / UCS-4. BOM насправді не призначений для позначення кодування (він вказує порядок байтів, як говорить назва), але багато додатків використовуватимуть BOM для розпізнавання UTF-16 / UTF-32, тому він служить індикатором кодування.

Або завдання глядача тексту вгадати спосіб кодування для певного текстового файлу, і вгадування може не завжди бути правильним? Якщо так, то як це переглядає текст?

Так, переглядач тексту може лише здогадуватися. Зазвичай використовується деяка евристика:

  • У деяких кодуваннях (особливо в UTF-8) не всі послідовності байтів є дійсними. Таким чином, програма може просто спробувати розшифрувати файл як UTF-8. Якщо це вдасться, файл, ймовірно, UTF-8; якщо не вдалося знайти недійсну послідовність байтів, це не так. Так працює, наприклад, vimза замовчуванням: спочатку спробує використовувати UTF-8 під час читання файлу; якщо це не вдасться, він повертається до ISO-8859-1.
  • У більшості старих 8-бітових кодувань допустима будь-яка послідовність байтів. У такому випадку ви можете іноді здогадуватися про кодування, переглянувши гістограму байтів (частота різних послідовностей байт / байт). Для цього Internet Explorer використовував для "здогадки" про кодування сторінки. Однак це дуже схильне до помилок, тому мало хто робить це.

У більшості випадків програмі потрібно чітко сказати, що таке кодування текстового файлу, інакше воно не зможе правильно прочитати.


Отже, як file -biпрацює, якщо BOM не використовується?
Old Geezer

@OldGeezer: fileмає різні евристики для визначення типу файлів та кодування. Переважно, він шукає рядки рядків або послідовності байтів у файлі. Якщо ви хочете отримати більш конкретну інформацію, вам, ймовірно, доведеться прочитати джерело. Або просто задайте окреме запитання :-).
sleske

@OldGeezer: І BTW fileне може надійно виявити більшість текстових кодувань (тому що це дуже складно). На головній сторінці є деяка інформація про виявлення набору символів - fileздебільшого розпізнає лише ASCII, UTF-8/16, EBCDIC та ISO-8859-x. Наприклад, файл, закодований у KOI8-R, повідомляється як "ISO-8859-1".
sleske

4

Звичайні текстові файли не зберігають ніякої інформації про їх кодування. Переглядач визначає його на основі кодування символів, яке ви встановили для нього. Він не може визначити це самостійно, оскільки все одно до комп’ютера.


Тож глядачі тексту не можуть розрізнити методи кодування текстових файлів. Якщо переглядачеві тексту надається об'єкт / виконуваний файл, чи зможе він сказати, що це не текстовий файл?
Тім

Ні, не може. Він спробує відкрити його як текстовий файл. І, звичайно, буде показано купу шашликів. Єдиний спосіб ви можете змусити її розрізняти кодування - це якщо ви вручну змінили кодування.
Wuffers

@Tim: Більшість глядачів тексту використовують евристику, щоб перевірити, чи є щось текстовим файлом. Якщо у файлі багато символів, які не можна роздрукувати, попереджають багато глядачів та редакторів (наприклад, lessі grepна Unix / Linux це роблять).
sleske
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.