В чем разница между открытым текстом и двоичными данными?

Многие языки имеют функции, которые обрабатывают только "открытый текст", а не двоичный. Означает ли это, что разрешены только символы в пределах диапазона ASCII?

Binary - это всего лишь серия байтов, разве это не похоже на открытый текст, который представляет собой только последовательность байтов, интерпретируемых как символы? Итак, может ли открытый текст хранить одни и те же форматы данных/протоколы как двоичные?

Ответ 1

Одно это часто означает, что язык может свободно интерпретировать символы управления certian, такие как значения 10 или 13, в качестве логических терминаторов линий. Другими словами, операция вывода может автоматически добавить эти символы в конце, а операция ввода может отключить их от ввода (и/или завершить чтение там).

В отличие от этого, операции ввода-вывода языка, которые рекламируют работу с "двоичными" данными, обычно включают входной параметр для длины данных для работы, поскольку нет другого пути (за исключением чтения последнего конца файла) до узнайте, когда это будет сделано.

Ответ 2

простой текст читается человеком, двоичный файл обычно не читается человеком, поскольку он состоит из печатных и непечатаемых символов.

Попробуйте открыть файл jpeg с помощью текстового редактора (например, блокнот или vim), и вы поймете, что я имею в виду.

Двоичный файл обычно создается таким образом, который оптимизирует скорость, поскольку не требуется синтаксический анализ. Обычный текстовый файл редактируется вручную, а не двоичный файл.

Ответ 3

"Обычный текст" может иметь несколько значений.

Наиболее полезным в этом контексте является то, что это всего лишь двоичные файлы, которые организованы в байтовые последовательности, которые определенная компьютерная система может перевести в конечный набор того, что он считает "текстовыми" символами.

Второе значение, несколько связанное, является ограничением на то, что упомянутая система должна отображать эти "текстовые символы" как символы, читаемые человеком как члены распознаваемого алфавита. Часто неписаная импликация заключается в том, что механизм перевода является ASCII.

Третий, еще более ограничительный смысл заключается в том, что эта система должна быть "простым" текстовым редактором/зрителем. Обычно подразумевается кодирование ASCII. Но, действительно, есть очень мало различий между вами, человеком, чтением текста, закодированным в каком-то фанк-формате и отображаемым проприетарной программой, против текстового редактора VI, читающего ASCII-кодированный файл.

В контексте программирования ваша среда программирования (состоящая из системных API OS + + возможности вашего языка) определяет как набор текстовых символов, так и набор кодировок, которые он может читать конвертировать в эти "текстовые" символы. Обратите внимание, что это может не обязательно подразумевать ASCII, английский или 8 бит. В качестве примера Perl может читать и использовать полный набор символов "Юникод".

Чтобы ответить на ваш конкретный вопрос, вы можете определенно использовать строки "символов" для передачи произвольных последовательностей байтов с оговоркой, что должны применяться соглашения о завершении строк. Проблема в том, что функции, которые уже существуют для "обработки символьных данных", вероятно, не будут иметь никакой полезной функции для обработки ваших двоичных данных.

Ответ 4

Как правило, это зависит от языка/среды/функциональности.

Двоичные данные всегда таковы: binary. Он передается без изменений.

Режим "Обычный текст" может означать одно или несколько из следующих действий:

  • поток байтов разбивается на строки. Линейные разделители:\r,\n или \r\n, или\n\r. Иногда это зависит от ОС (например, * nix нравится \n, в то время как Windows нравится \r\n). Окончание строки может быть скорректировано для приложения чтения
  • кодировка символов может быть скорректирована. Среда может обнаруживать и/или преобразовывать исходную кодировку в кодировку, ожидаемую приложением
  • возможно, некоторые другие преобразования должны быть добавлены в этот список, но я не могу больше думать об этом в данный момент.

Ответ 5

Технически ничего. Обычный текст - это форма двоичных данных. Однако основное отличие заключается в том, как хранятся значения. Подумайте, как можно сохранить целое число. В двоичных данных он будет использовать формат двух дополнений, возможно, занимая 32 бита пространства. В текстовом формате число будет храниться вместо этого в виде ряда цифр в юникоде. Таким образом, число 50 будет храниться как 0x32 (заполнено до 32 бит) в двоичном формате, но будет сохранено как "5" 0 в виде обычного текста.