Читать бинарный XML как текст в .NET

1

Файл AndroidManifest.xml при компиляции и упаковке в apk превращается в двоичный файл xml. Я даю эту информацию, если есть разница между этим и регулярными двоичными файлами xml, но я не уверен, что есть.

Мне нужно получить информацию, содержащуюся в этом файле xml. Существуют инструменты для java и python, но я ничего не нашел для .Net. Как я могу прочитать этот файл в .Net?

Это самое многообещающее решение, которое я нашел, но он по-прежнему не отображает текст в человекообразном формате.

using (BinaryReader b = new BinaryReader(File.Open(filePath, FileMode.Open), Encoding.ASCII)) {
     int pos = 0;
     int length = (int)b.BaseStream.Length;
     while (pos < length) {
          char v = b.ReadChar();
          Console.Write(v);
          pos += sizeof(char);
     }
}

Любые идеи, что я делаю неправильно?

Я пытался с различными encoding при создании BinaryReader, и они не работали.

Спасибо.

Теги:
binary
parsing

3 ответа

1
Лучший ответ

Файл - это не просто "двоичные данные" xml. В андроид xml есть "формат".

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

Какая информация вам нужна в файле манифеста? Файл aapt.exe в SDK android также может вывести всю информацию из файла манифеста Android. Вам просто нужно запустить эту команду (с помощью необходимых переключателей) и проанализировать выходной поток консоли.

1

Файл выглядит так, как будто он закодирован в пользовательском формате, я не думаю, что для его декодирования есть библиотека .NET, поэтому вам придется переписать perl script как axml2xml.pl, чтобы сделать это за вас. К сожалению, нет быстрого и легкого решения, но, глядя на него, переписывать его не должно быть слишком сложно.

0

В зависимости от кодировки документов XML вы можете использовать Encoding Class

System.Text.Encoding.ASCII.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF8.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF32.GetString(File.ReadAllBytes(filePath)); etc.

... перевести ваши байтовые массивы в читаемые пользователем строки. Возможно, причина, по которой ваш код выше не отображает человекочитаемые символы, - это просто кодировка?

  • 0
    кажется, не работает для меня, это отличается от указания кодировки в BinaryReader?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню