Задать вопрос
@Borankin

Почему в .txt файле на Linux появляется «лишний» байт?

Создаю на рабочем столе Linux (Ubuntu 22) пустой текстовый файл 1.txt.
Проверяю в свойствах его размер - 0 байт.
Записываю в файл ровно один любой символ латинского алфавита, сохраняю. Размер файла становится 2 байта.
Почему собственно 2 байта, а не 1 байт?

Символы латинского алфавита кодируются же 8 битами (1 байт).
Если дописать ещё один любой латинский символ или цифру, то размер становится 3 байта.
То есть появление в файле первого символа даёт файлу 2 байта, каждый последующий символ как положено - по одному байту. Если в файле слово из трех букв, то его размер 4 байта и т.д.
Обращаю внимание, что никаких пробелов и переносов строк нет, только латинские буквы (цифры). Регистр букв — т.е. большие прописные или маленькие строчные на результат не влияют. В Debian то же самое. На других дистрибутивах не проверял.

Почему обратил внимание и заинтересовался? Просто накануне вникал в кодирование символов, тестировал немного на Windows 10. Там всё ясно и понятно. Пустой текстовый файл - 0 байт. Каждая латинская буква даёт размеру файла 1 байт. Т.е. всё работает логично.
Итак, откуда лишний байт на Linux и для чего он?
  • Вопрос задан
  • 643 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Откройте файл в шестнадцатеричном редакторе/вьюере, например wxHexEditor или GHex и посмотрите, что в нём лежит.
Ответ написан
Комментировать
@Borankin Автор вопроса
Спасибо всем за ответы и комментарии.
Подведу здесь итог и поясню, что удалось выяснить.

Кратко.
В Linux при создании текстового файла автоматически неявно в конец файла добавляется символ перевода строки (Line Feed - LF, \n). Визуально в графическом текстовом редакторе его никак не видно.

Развёрнуто.
1. Пробовал создавать файл разными способами.
- С помощью консольных текстовых редакторов vim и nano.
- В терминале с использованием перенаправления потока вывода (echo a > 1.txt).
- А также (touch 1.txt), совместно с графическим текстовым редактором.
Результат везде одинаковый (из комментария Rsa97 стало понятно, что результат не везде одинаковый - см. коммент)

2. Ниже приведу примеры открытия файлов с разными символами с помощью утилиты xxd.
Расшифровка в формате (буква = Hex = Bin = symbols)
s = 730a = 01110011 00001010 = s\n
W = 570a = 01010111 00001010 = W\n
a = 610a = 01100001 00001010 = a\n
aa = 6161 0a = 01100001 01100001 00001010 = aa\n

a(+Enter) = 610a 0a = 01100001 00001010 00001010 = a\n\n (тот перевод строки (первый) который задан явно, с помощью Enter, его видно в графическом редакторе, а второй не видно)

a(+Enter)a = 610a 610a = 01100001 00001010 01100001 00001010 = a\na\n

3. Определение кодировки файлов с помощью ( file -i 1.txt) выдаёт у меня такой результат:
1.txt: text/plain; charset=us-ascii

В общем, разобрался что к чему. Ещё раз благодарю за ответы и комментарии.
Между делом, наконец-то понял, что такое UTF BOM )))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Скорей всего это связано с файловой системой под линукс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы