2017-08-15 82 views
1

我使用Base64編碼來存儲值從我的數據結構轉換爲字符串。 基本上我做的是轉換一個字節數組的base64字符串C# - 字符串存儲爲Base64,但retreived字符串不是一個有效的base64字符串

string StoredData = Convert.ToBase64String(ByteArray); 

然後我把StoredData到256個字符的最大長度的字符串,並將它們存儲爲ASCII字符串(在AutoCAD擴展數據作爲DxfCode.ExtendedDataAsciiString)。

當我想找回我的數據我做了以下內容:

首先,我結合使用每256長字符串StoredData = sting1 + string2 + ... 然後我用

var ByteArray = Convert.FromBase64String(StoredData); 

現在,這已經很好工作轉換StoredData回的ByteArray對我和我的客戶來說,直到一個月前,我的客戶之一出現了一些崩潰和錯誤。 我問他送了我他的保存的數據,和我驚訝地看到,他的數據包含無效的Base64編碼字符(請參閱下面的示例)

tM7x24QLLLALr5ivAx3XFAM7uciYXrCjKXSFd3XOL/KGIc3C + JMO8QjHT/4C + puYrNLq5r9Is0vpDKyuxw9I6R3f1LuOYSdHS6XgZJEyMvGwSHNRSYJ/a0IoumQftB3XspQRwp4QSd7qcUVsrXw0 + 2RS/sd2vAvUFxEQgwsHaabb01YjchGeyxr1f78A4qy2BL/oHAsRak9UYN0mDzhZgbhpahlgdK3eWd8b2BTM01lWh74pYUrJR + JfQ0tw0Eu㿔

Z/1JxBMUv2cB6NrFehSuNF9l4dhAaZQ + TcIClZmk/ZC8TJ0rKka/J + HqhLDAwWExB3nXoIi00uJnE7J4R6rU + Q ==

一個是你能看到的第一個256長字符串具有無效的Base64字符(㿔)

這是爲什麼發生?這可以與用戶電腦相關嗎?我試圖在沒有任何成功的情況下複製這個錯誤,並且因爲我沒有訪問他們的計算機,我開始認爲它可能是他們的一方。

該應用程序使用.NET Framework版本4.5。

編輯:原來客戶端給我一個恢復的文檔其中沒有恢復文本字符串正確這就解釋了損壞的字符串。

+3

不可能想,當你已經證明我們的唯一代碼兩次調用框架方法。 –

+0

@Damien_The_Unbeliever之間的內容是將StoredData保存到AutoCAD中,並在需要時將其恢復。我可以在調試時或從AutoCAD內部看到存儲的值,並且它們正常工作。所以基本上我在AutoCAD中打開了一個事務,將這些字符串放到一個ResultBuffer中,然後我提交這些更改。 – mavios

+0

林想知道,因爲你是分裂了ASCII和使用「+」來格式化字符串,如果你打到一些副作用,它將其轉換成中文Unicode。我不知道這是否有幫助,但該字符的Unicode是U + 3FD4 –

回答

0

原來的應用程序崩潰和客戶端已經恢復已損壞的字符串的圖文檔。