У меня есть два текстовых файла, на которые я даю ссылки на скачивание, а не вставку для точного сохранения их содержимого:
Оба этих текстовых файла состоят только из пробелов, символов возврата каретки, перевода строки и буквы X, и они должны быть в кодировке ASCII. Единственное различие между этими двумя файлами заключается в том, что во втором файле удалены начальные и конечные пустые строки и удалены некоторые начальные и конечные пробелы в каждой строке.
Первый файл не вызывает никаких проблем. По какой-то причине мои текстовые редакторы определяют второй файл как UTF-8:
- Блокнот при двойном щелчке по текстовому файлу отображает поврежденный текст:
- Блокнот, когда используется Файл → Открыть, работает нормально, пока я явно выбираю "ANSI":
- Notepad++, хотя и отображает файл нормально, считает, что он закодирован как «UTF-8 (без спецификации)»:
В Notepad++, даже если я выберу "преобразовать в ANSI" и сохраню файл, сохраненный файл будет байтовым, идентичным оригиналу, и оба редактора все равно обнаружат его как UTF-8!
Оба редактора не имеют проблем с первым файлом и правильно распознают его как ASCII (или ANSI).
Я посмотрел второй текстовый файл в шестнадцатеричном редакторе. Действительно, это не начинается с спецификации. Первые несколько байтов файла - 20 20 20 20 20 20 20 20
, как и должно быть, поскольку он начинается с пробелов:
У меня вопрос: почему тогда и Блокнот, и Блокнот ++ определяют второй файл как UTF-8? Учитывая, что файл не имеет заголовка спецификации, почему это происходит, и что уникально во втором файле по сравнению с первым файлом, который вызывает это? Я не могу понять, что происходит.