C#base64对象序列化编码/解码问题
我正在为我的项目(这是一个类)使用C#中的序列化和反序列化。 它们被序列化并保存到XML文件中。加载项目时,一切顺利 现在,我尝试将序列化项目编码为Base64,然后保存文件,这也很顺利。文件的第一行(编码之前!)如下所示:C#base64对象序列化编码/解码问题,c#,serialization,encoding,base64,decoding,C#,Serialization,Encoding,Base64,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
<?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">
以及用于解码的代码:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
return returnValue;
这可能是什么?我如何修复 文件声明自己为UTF-8-那么为什么要使用ASCII将其编码为二进制?UTF-8中有许多字符不能用ASCII表示。您甚至需要在内存中以文本形式存储文件吗?为什么不把它作为二进制数据加载(例如,
File.ReadAllBytes
)呢
如果确实需要以字符串开头,请使用
Encoding.UTF-8
(或Encoding.Unicode
,尽管这可能会导致更大的字节数组),一切都应该正常。这个额外的字符是字节顺序标记-不能用ASCII表示,因此是“?”替换字符。猜一猜?表示字节顺序标记,该标记是ASCII中无法表示的字符。为什么不使用UTF-8编码
byte[] toEncodeAsBytes = System.Text.Encoding.UTF8.GetBytes(toEncode);
与其担心编码,不如使用
XmlWriter.Create(outPath)
,然后将XmlWriter
传递给序列化代码。这将避免此问题和其他问题(例如必须为大型对象图缓冲非常大的字符串)。有一个重载,它接受XmlWriterSettings
以实现更精细的控制
XmlWriter
为大多数xml代码所接受
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
return returnValue;
byte[] toEncodeAsBytes = System.Text.Encoding.UTF8.GetBytes(toEncode);