3

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

$ grep "grep string" output_file.txt
Binary file output_file.txt matches.

$ grep -a "grep string" output_file.txt
[correct results]

Некоторое чтение показало, что grep ищет нулевой символ в первой тысяче байтов или около того, а затем определяет из этого, является ли файл «двоичным», поэтому мой вопрос состоит из двух частей:

  1. Есть ли простой способ убрать нулевые символы из моих файлов (я могу сделать это как часть моей постобработки), чтобы убедиться, что grep работает правильно без флага -a?

  2. Есть ли что-то очевидное, что я должен искать в своем коде, чтобы предотвратить запись нулевых символов в файл? Я просмотрел код довольно тщательно и не вижу никаких явных виновников.

    ,

2 ответа2

5

Я могу ответить хотя бы на первый вопрос. Если вы используете Unix/Linux, вы можете использовать tr

tr -d '\000' < filein > fileout

где \000 - нулевой символ Вы также можете удалить все непечатаемые символы, как показано на примере здесь: «Редактирование текста в Unix: sed, tr, cut, od, awk»

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

4

Я собираюсь сделать предположение ....

Ваша программа записывает файл в UTF-16, кодировку Unicode, которая использует два байта для каждого символа. Каждый второй байт в большинстве случаев равен нулю.

iconv -f utf-16 -t utf-8 < filein > fileout

преобразует его в UTF-8, с которым удобно большинству coreutils.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .