C#base64编码/解码与对象序列化问题

Mys*_*rth 4 c# base64 encoding serialization decoding

我在C#中使用序列化和反序列化来实现我的项目(这是一个类).它们被序列化并保存到XML文件中.加载项目时,一切顺利.

现在我正在尝试将序列化项目编码为Base64,然后保存文件,这也很顺利.该文件的第一行(编码之前!)如下所示:

<?xml version="1.0" encoding="utf-8"?>
  <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)

当我解码文件时,有一个在行前添加:

?<?xml version="1.0" encoding="utf-8"?>
  <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)

我用来编码的代码:

byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
        string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
        return returnValue;
Run Code Online (Sandbox Code Playgroud)

和解码代码:

byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
        string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
        return returnValue;
Run Code Online (Sandbox Code Playgroud)

这可以是什么,我该如何解决这个问题?

Jon*_*eet 7

该文件将自己声明为UTF-8 - 那么为什么使用ASCII将其编码为二进制?UTF-8中有许多字符无法用ASCII表示.你甚至必须以文本形式在内存中开始使用文件吗?为什么不把它作为二进制数据加载(例如File.ReadAllBytes)?

如果你确实需要从一个字符串开始,使用Encoding.UTF-8(或者Encoding.Unicode,虽然这可能会导致更大的字节数组),一切都应该没问题.额外的字符是字节顺序标记 - 不能用ASCII表示,因此"?" 替换角色.