Пойми, почему буквы иногда превращаются в кракозябры и что скрывают невидимые концы строк.
Открыть этот урок в KodokonМашина понятия не имеет, что такое буква A. Она оперирует только числами. Поэтому, чтобы записывать текст, всем пришлось договориться о таблице соответствия: число 65 означает A, 66 означает B, и так далее. Такое соглашение называется кодировкой. Самая старая из них, ASCII, появилась в 1960-х и покрывала только английский алфавит: ни é, ни ç, ни ü, ни единой русской или китайской буквы.
Тогда каждая страна изобрела свою собственную таблицу, и наступил хаос: русский файл, открытый с западноевропейской таблицей, превращался в бессмыслицу, и наоборот. Современное решение называется Unicode - единый каталог, который присваивает номер каждому символу всех языков, включая эмодзи. А UTF-8 - это стандартный способ записать эти номера в файл. Сегодня правило простое и без исключений: всегда сохраняй свои файлы в UTF-8.
Записан в UTF-8, прочитан как UTF-8 -> Creme brulee (всё на месте)
Записан в UTF-8, прочитан как Latin-1 -> Crème brûlée
Записан в Latin-1, прочитан как UTF-8 -> Cr?me br?l?eВторая невидимая вещь - конец строки. Когда ты нажимаешь Enter, в файле не рисуется никакая линия. Вместо этого добавляются один или два невидимых символа, и здесь системы тоже так и не договорились между собой. macOS и Linux используют один символ, LF (line feed, перевод строки), который записывают как \n. Windows использует два подряд, CRLF (carriage return, возврат каретки, затем line feed), который записывают как \r\n. Это пришло прямиком от пишущих машинок, где требовалось два отдельных движения: вернуть каретку назад, а затем прокрутить лист на строку вниз.
Что ты видишь на экране:
Привет
Как дела
Что на самом деле лежит в файле:
macOS / Linux (LF) Привет\nКак дела
Windows (CRLF) Привет\r\nКак делаé показывается как é?