【问题标题】:Converting a string rappresentation of a file (byte array) back to a file in C#将文件(字节数组)的字符串表示形式转换回 C# 中的文件
【发布时间】:2013-09-12 14:09:16
【问题描述】:

如标题所示,我正在尝试将字节数组的字符串表示形式转换回原始文件,其中字节所在的位置。

我做了什么:

我有一个获取整个文件并发送它的网络服务:

answer.FileByte = File.ReadAllBytes(@"C:\QRY.txt");

在传输结果 xml 中序列化后,我有这一行:

<a:FileByte>TVNIfGF8MjAxMzAxMDF8YQ1QSUR8YXxhfGF8YXxhfGF8YXwyMDEzMDEwMXxhfGF8YXxhfGF8YXxhfGF8YXxhfGF8YXxhDVBWMXxhfGF8YXxhfGF8YXxhfGF8YXxhfDIwMTMwMTAxfDIwMTMwMTAxfDB8MHxhDQo=</a:FileByte>

我尝试在另一个简单的应用程序中使用这一行将其转换回来:

//filepath is the path of the file created
//bytearray is the string from the xml (copypasted)
File.WriteAllBytes(filepath, Encoding.UTF8.GetBytes(bytearray));

自从 xml 声明使用此字符集以来,我一直使用 UTF8 作为编码。保留数据类型不是一种选择,因为我正在编写一个简单的实用程序来检查文件转换。

也许我遗漏了一些非常基本的东西,但我无法提出可行的解决方案。

【问题讨论】:

    标签: c# file-upload encoding file-encodings


    【解决方案1】:

    这肯定不是 UTF8,序列化程序可能会将其转换为 Base64。

    使用Convert.FromBase64String() 取回您的字节

    假设 bytearray 是 "TVNIfGF8M..." 字符串,试试:

    string bytearray = ...;
    File.WriteAllBytes(filepath, Convert.FromBase64String(bytearray));  
    

    【讨论】:

      【解决方案2】:

      UTF8 是一种将任意 文本 转换为字节的方法。
      ReadAllText() 使用它将磁盘上的字节转换回 XML。

      您看到了一种将任意 字节 转换为适合 XML 的文本的机制。 (然后使用 UTF8 将该文本转换为不同的字节)。

      可能是 Base64;使用Convert.FromBase64String()

      【讨论】:

        猜你喜欢
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 2012-01-06
        • 2021-12-02
        • 2011-03-27
        • 1970-01-01
        相关资源
        最近更新 更多