[英]C# base64 encoding/decoding with serialization of objects issue
我在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">
當我解碼文件時,有一個? 在行前添加:
?<?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[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
和解碼代碼:
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
以實現更好的控制。
大多數xml代碼都接受XmlWriter
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.