簡體   English   中英

C#base64編碼/解碼與對象序列化問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM