[英]best encode decode for binary file in java and c#
我知道有很多類型的編碼和解碼,根據我的閱讀,base64是編碼二進制文件(圖像,mp3,視頻)的絕佳選擇。
現在,當涉及到解碼時,我需要從base64轉換然后獲取字符串值。 解碼后獲取字符串的過程,我將要求這樣做(在c#中): System.Text.Encoding.ASCII.GetString(encodedDataAsBytes);
在這里我注意到我有幾個選項來使用什么來獲取字符串,如ASCII,UNICODE,DEFAULT。
這篇文章中的真正問題是如果我使用java編碼和c#解碼二進制文件,我應該使用什么是最好的解決方案/選擇? 我嘗試了幾種方法,有些字符無法讀取,因此給出了問號符號(?)。
然而,可以讀取字節的最接近的編碼解碼是當我在Java中使用它時: String encoded = Base64.encodeToString(fileData, Base64.CRLF);
同時在c#im中使用如下: byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); string returnValue = System.Text.Encoding.ASCII.GetString(encodedDataAsBytes);
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); string returnValue = System.Text.Encoding.ASCII.GetString(encodedDataAsBytes);
不過,有幾個字符無法讀取。 有沒有人有這個問題陳述的解決方案? 任何反饋都非常感謝。 謝謝你的進步。
關於二進制文件的問題是它們是二進制文件 (類型為byte[]
)。 大多數情況下,您無法將字節直接轉換為字符串(使用Encoding.GetString(byte[])
),因為其中一些可能具有無法在字符串中表示的值(這正是您所遇到的)。
使用Encoding.GetString(byte[])
將二進制數據轉換為字符串以將其轉換為BASE64完全沒有意義,因為在將二進制信息轉換為字符串時丟失信息 - 您需要將其直接轉換為BASE64。
將字節數組的BASE64字符串表示形式轉換為byte[]
是正常的 - 這可以返回原始二進制數據。 但是,由於我上面給出的原因,將此byte[]
轉換為string
不正常。
BASE64編碼應該如何工作:
byte[]
byte[]
創建BASE64字符串 byte[]
byte[]
你聲明輸入是“圖像,mp3,視頻”,所以:任意二進制。 然后,您聲明您正在使用base-64,這意味着:由於某種原因,您需要將此數據作為字符串傳輸/存儲(注意:傳輸/存儲作為原始二進制文件通常是首選 - base-64具有開銷)。
現在,當涉及到解碼時,我需要從base64轉換然后獲取字符串值。
有問題; 這里沒有字符串值 。 “圖像,mp3,視頻”根本不是“字符串值”。 你可以做的是從base-64解碼回原始二進制文件(java或c#中的平凡),但這就是你所能做的 。 如果你需要來自原始二進制文件的“字符串值”,你唯一能做的就是通過base-64重新編碼它(這會讓你回到你開始的那個),或者其他一些base-n。
如果已知二進制數據實際上是存儲在該編碼中的文本數據,則只有ASCII或UTF-8等文本編碼才有意義。 您不能使用UTF-8來“解碼”實際上不是UTF-8的二進制文件。
如果您想在解碼數據后獲取字符串,則意味着您的數據以某種方式呈現為文本格式。如果是這種情況,您應該了解文件的初始編碼,例如UTF-8。 然后你可以正確解碼字符串。 如果您的程序僅將文件從一個地方傳輸到另一個地方而不對其內容執行任何操作,則最好在解碼時將其保留。
如果二進制數據或UTF-8文本沒問題,則可以跳過步驟2和4.但是需要1和5,因為在C#和Java等語言中,字符串是“邏輯字符”,它不是可以存儲或傳輸的字節(當然它是內存中的字節,通常是UTF-16或UTF-32,但你不應該關心它)。 必須使用某種編碼將其轉換為字節。 UTF-x是唯一不會丟失任何字符的字符,如果大多數字符來自“西方”字母,則UTF-8最節省空間。
關於base64的一個特殊之處在於,雖然它實際上是7位ASCII字符,但是您可以使用任何字符串編碼將base64編碼的文本放入C#/ Java字符串對象並返回到base64編碼的字節數組,因為所有使用的字符串編碼都是超集7位ASCII。 因此,您可以獲取圖像數據,base64對其進行編碼,並將結果文本放入String對象,而無需擔心編碼和損壞。
二進制文件的步驟:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.