Как удалить char 0x0 из середины файла в Ruby?

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

Итак, я использую gsub:

xmlBody.gsub!(/\u0000/i,'')

заменить его. Анализатор xml теперь удовлетворен. Затем файл xml сохраняется (с кодировкой UTF-8).

Однако, когда я повторно открываю файл в текстовом редакторе Sublime, происходит сбой Sublime. И когда я использую другой редактор (который не дает сбоев) и копирую/вставляю содержимое xml файла в валидатор xml, валидатор говорит, что char 0x0 недействителен. Похоже, что gsub на самом деле не удалил символ.

Какие-либо предложения?

Я также пытался использовать force_encoding("UTF-8") для xmlBody и xmlBody.delete!(0x0) с теми же результатами.


person Tim    schedule 01.09.2015    source источник
comment
Я бы открыл, заменил и записал файл с помощью обычного класса File, попытался открыть его с помощью ST, а затем открыть его с помощью синтаксического анализатора xml.   -  person peter    schedule 01.09.2015
comment
xml поступает из службы отдыха и записывается после синтаксического анализа xml. Но при первой записи файла 0x0 уже там. Источником является запись mongodb с этим плохим символом.   -  person Tim    schedule 01.09.2015
comment
так что вы получаете файл xml с 0x0, что вам нужно после этого? точно не открыть его с помощью ST? слишком много информации не хватает iaa. можешь скинуть ссылку на сервис или файл с проблемой?   -  person peter    schedule 02.09.2015
comment
снова удалив символ в файле, позаботился о проблеме.   -  person Tim    schedule 02.09.2015


Ответы (1)


XML фактически содержит содержимое файла. Я удаляю другие символы, и их нет в файле. Но 0x0 продолжал возвращаться. Итак, я попытался удалить как при разборе xml (чтобы он правильно анализировал), так и снова при записи файла. Это наконец ушло.

output.write(utf8_encoded_content.gsub!(/\u0000/i, '')) output.close

person Tim    schedule 02.09.2015