Строка замены Notepad ++ с усечением NUL после NUL

307
David Mancini

Используя Notepad ++, я пытаюсь заменить строку (в двоичном файле) следующим образом:

A NULp NULp NULl NULeNUL

С другой строкой, как это:

О NULг NULа NULн NULг NULеNUL

Так...

Используя следующий формат регулярного выражения поиска, N ++ находит все экземпляры целевого текста просто отлично:

A \x00p \x00p \x00l \x00e\x00

Но используя следующую строку замены следующим образом:

О \x00г \x00а \x00н \x00г \x00е\x00

Заменяет все найденные экземпляры:

ОNUL

...и это все. Все в строке замены после первого NULигнорируется. Я погуглил, посмотрел вики по N ++ и, может быть, я пропустил это, но я не вижу ничего, объясняющего, почему это происходит. Похоже на проблему «нулевого завершения», но разве поиск и замена не должны быть достаточно умными, чтобы справиться с этим? Я использую это неправильно?

0
Похоже, что вы редактируете файл Unicode, но он читается как ASCII. Это пропускает начальный `\ xFF \ xFE`? Если он открыт с правильной кодировкой, тогда строки поиска и замены будут просто `Apple` и` Orange`, и все должно работать нормально. AFH 5 лет назад 1
Нет, это двоичный файл, `* .accdb`, если быть точным. David Mancini 5 лет назад 0
Notepad ++ не предназначен для использования в качестве редактора двоичных файлов. Тем не менее, у него есть плагин hex hex editor. См. [Как установить плагин Notepad ++ Hex-Editor?] (// superuser.com/q/1324217) DavidPostill 5 лет назад 0
Файл, который вы редактируете, является файлом базы данных Access, и его не следует редактировать с помощью чего-либо другого (или совместимого программного обеспечения); в противном случае вы можете повредить структуру базы данных, особенно если вы изменяете длину строки. Тем не менее, я не смог найти или создать данные Unicode, которые NP ++ не распознал как таковые. Однако NotePadQQ (порт Linux NP ++) можно было принять для принятия текстового файла Unicode в качестве ASCII, и я смог воспроизвести ваши выводы, но я обнаружил, что он будет работать так, как вы хотите, если я выберу «Поиск со специальными символами» вместо с регулярными выражениями. AFH 5 лет назад 2
@AFH Я на самом деле пытаюсь заменить строку одинаковой длины, хранящуюся в качестве свойства базы данных, приведенное выше было просто примером. Последний вопрос был не о предполагаемой проблеме X <> Y, поскольку я хотел знать, почему Notepad ++ игнорирует символы замены после первого "` \ x00` ". То, что я работаю с accdb, несущественно для вопроса. David Mancini 5 лет назад 0
И работает ли Extended, когда вы используете его вместо RE? AFH 5 лет назад 0
Когда я использую расширенный для поиска, я не могу искать `NUL`, за которым следует числовой символ, потому что он интерпретирует число как часть escape-кода. Например, \ 07 должно быть `NUL`7, а не" \ 7 ". David Mancini 5 лет назад 0

0 ответов на вопрос

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