Как задаётся кодировка текстового файла и как notePad++ определяет кодировку?
Давно уже знаю что на PHP взять любой файл и открыть его через file_get_contents (причём не важно с диска или по ссылке в Интернет) а затем сохранить через fopen fwrite и он не будет повреждённым.
Стал копаться с файлами в Delphi и заметил что если при сохранении в текстовый файл использовать file: array of byte и записать 4 байта соответствующие слову text, то такой файл не получится открыть в NotePad, вернее он откроется как бинарный и текст в нём читаться не будет.
Вот ещё какой момент, создаём к примеру 2 текстовых файла с помощью NotePad++ в оба пишем слово text, только один файл в ANSI а другой в UTF-8 если теперь прочитать оба файла с помощью языка программирования то оба файла имеют длину 4 байта и одинаковые коды символов. Вот только NotePad откуда то знает, что один в кодировке ANSI а другой в UTF-8.
Я уже начал думать что кодировка текстового файла хранится в операционной системе где то отдельно от файла. Но кажется нет, поскольку если взять 2 эти файла и переместить на другой комп, не важно по e-mail или через FTP то NotePad++ на другом компе всё равно определит что кодировка одного файла UTF-8 а другого ANSI. Хотя оба хранят всё те же одинаковые 4 байта информации.
В Интернет смотрел информацию, написано что кодировка текстовых файлов определяется только телом символов в нём содержащихся, но я же записываю слово text и ничего большего, а кодировка символов этого слова в UTF-8 и ANSI одинаковая. Возможно я упустил из внимания какой то важный момент. Как тогда NotePad++ понимает у какого текстового файла кодировка UTF-8 а у какого ANSI? И есть ли какие то особенности у бинарных файлов? Может быть какие то особые заголовки?