Последствия удаления символов NUL из текстового файла?
363
Hashim
У меня довольно большой текстовый файл (около 20 ГБ), который я использую в качестве простой базы данных, поэтому каждая запись разделяется новой строкой, и нарушение этого формата вызовет проблемы. Этот файл также содержит некоторые NUL-символы, или, по крайней мере, это то, что я подозреваю, так как grep
рассматривает его как двоичный файл.
Я сталкивался с этим вопросом и ответом, который заявляет:
Некоторое чтение показало, что grep ищет нулевой символ в первой тысяче байтов или около того, а затем определяет из этого, является ли файл «двоичным».
По этой причине я думаю об удалении этих символов из файла примерно так:
tr < file-with-nulls -d '\000' > file-without-nulls
Но я хочу быть уверен, что это не нарушит форматирование файла. Это вообще возможно?
Как насчет просто сделать это и сохранить в новый файл. Затем посмотрите, правильно ли работает новый файл. Текстовые файлы обычно не содержат нулевых значений, поэтому мы понятия не имеем, какую функцию они могут выполнять.
fixer1234 6 лет назад
1
Нулевой символ исходит от смешивания UTF-16 с UTF-8? Текст UTF-16 содержит нули.
matzeri 6 лет назад
2
[Этот ответ] (https://unix.stackexchange.com/a/276028/108618) говорит о возможной ошибке кодирования.
Kamil Maciorowski 6 лет назад
0
@KamilMaciorowski Если это ошибка кодировки, описанная в этом ответе, что, по-моему, является менее вероятным случаем, удаляет ли файл NUL-символов его вероятность? Я предполагаю, что они более или менее независимы друг от друга, так что даже если ошибка кодирования действительно существует, удаление символов NUL теоретически вряд ли принесет больше вреда.
Hashim 6 лет назад
0
@matzeri Я не создавал файлы, они были получены из Интернета и, вероятно, были отредактированы десятками людей, и таким образом приобрели всевозможные артефакты в процессе. Вполне возможно, что вы говорите, я просто понятия не имею.
Hashim 6 лет назад
0
@ fixer1234 Поскольку было бы невозможно окончательно определить, является ли форматирование базы данных текстового файла объемом 20 ГБ со строками 1,2 ББ и более чем 1800 символами NUL на самом деле нарушено или нет - сбой здесь, скорее всего, будет молчать, так что отдельные записи будут просто слиться с предыдущими, и `grep`ping для этих записей создаст обманчивое впечатление, что для него не найдено совпадений. Вот почему я должен быть уверен, что то, что я планирую, теоретически правильно, потому что файл такого размера не может быть очищен после факта, чтобы проверить, все ли в порядке.
Hashim 6 лет назад
0
@ fixer1234 Что касается функции NUL в текстовом файле с новой строкой, то, правда, такой файл обычно не содержит NUL, но, если сформулировать мой вопрос по-другому, действительно ли они в них нужны? Существуют ли какие-либо (теоретически, конечно) способы, с помощью которых текстовый файл с разграничением строк должен когда-либо полагаться на NUL для своего форматирования, или их можно с уверенностью считать артефактами, которые можно просто удалить, не влияя на положение новых строк?
Hashim 6 лет назад
0
что выдает `file your-file-name '?
matzeri 6 лет назад
0
@matzeri "данные"
Hashim 6 лет назад
0
Данные могут означать, что различные тестовые коды были смешаны вместе. Если ноль исходит от нормальных символов ASCII в представлении UTF-16, вы должны увидеть альтернативные пары `нуль / ASCII`. В этом случае удаление нулевого значения - это просто преобразование UTF-16 в ASCII. Однако, если у вас есть код UTF-16, который превышает диапазон ASCII, удаление нуля просто оставит другие символы в неправильной кодировке.
matzeri 6 лет назад
1
Если это простой текст ASCII, он не должен содержать ничего, кроме текстовых символов и LF или CR / LF. Там нет форматирования, кроме разрывов строк. Если бы содержимое содержало расширенный набор символов, я не думаю, что удаление нулей изменило бы что-либо, как уже предложил Маццери (я не думаю, что нулевое значение изменяет символ). Тем не менее, вам не нужно проверять эффект каждого последнего нуля. Если они пришли из чего-то вроде UTF-16, все они будут иметь одинаковый эффект, если их удалить. Найдите расположение нескольких примеров и проверьте их после очистки. (Продолжение)
fixer1234 6 лет назад
1
Тем не менее, если абсолютно необходимо, чтобы вы случайно не изменили данные, не удаляйте пустые значения. По-видимому, они не являются источником проблем, и 1800 в 20 ГБ файле не будут иметь большого значения.
fixer1234 6 лет назад
1
0 ответов на вопрос
Похожие вопросы
-
2
Windows 7 Home Premium запоминает пароли общего доступа к сети?
-
4
Как заблокировать выровненные по правому краю панели инструментов в Windows 7, чтобы они не выглядел...
-
4
Функция Windows 7 «Aero Snap» в Ubuntu GNOME
-
-
3
Мой второй жесткий диск не виден в Windows 7
-
7
Как заменить Блокнот в Windows 7?
-
2
Как расположить значки панели задач Windows 7 в 2 ряда?
-
2
.profile в Mac OS X?
-
1
Проблемы во время сна на Windows 7
-
6
Как управлять функцией привязки Windows 7 с помощью двух мониторов?
-
10
Как мне обновить Windows 7 RC до Windows 7 RTM?