【问题标题】:Read binary XML as text in .NET在 .NET 中将二进制 XML 读取为文本
【发布时间】:2010-12-17 15:17:38
【问题描述】:

AndroidManifest.xml 文件在apk 中编译和打包后会变成二进制xml 文件。我提供此信息以防此文件与常规二进制 xml 文件之间存在差异,但我不确定是否存在。

我需要获取此xml 文件中包含的信息。 javapython 有工具,但我没有找到 .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);
     }
}

任何想法我做错了什么?

我在创建 BinaryReader 时尝试了不同的 encodings,但它们没有奏效。

谢谢。

【问题讨论】:

    标签: .net android xml parsing binary


    【解决方案1】:

    该文件不仅仅是 xml 的“二进制数据”。 android xml 有一个“格式”。

    您可以查看AXMLPrinter2 - 它采用二进制 xml 并将其转换为人类可读的。我直接链接到一个看起来像它完成大部分工作的类。

    您需要清单文件中的哪些信息? android SDK 中的 aapt.exe 也可以从 android manifest 文件中提取所有信息。您只需要运行该命令(使用所需的开关)并解析控制台输出流。

    【讨论】:

      【解决方案2】:

      该文件看起来像是以自定义格式编码的,我认为没有可用于解码的 .NET 库,因此您必须重写像 axml2xml.pl 这样的 perl 脚本才能为您完成.不幸的是,没有一个快速简单的解决方案,但是看看它,重写它应该不会太难。

      【讨论】:

        【解决方案3】:

        根据您的 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.
        

        ...将您的字节数组转换为人类可读的字符串。也许您上面的代码没有显示人类可读字符的原因仅仅是编码?

        【讨论】:

        • 似乎对我不起作用,这与在 BinaryReader 中指定编码有什么不同吗?
        猜你喜欢
        • 1970-01-01
        • 2011-03-31
        • 2015-03-13
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 2018-12-25
        • 2013-12-22
        • 1970-01-01
        相关资源
        最近更新 更多