簡體   English   中英

從base64string到string回到base64string

[英]base64string to string back to base64string

我正在嘗試將base64string轉換為字符串然后再轉換回base64string的實驗,但是,我沒有得到原始的base64string:

String profilepic = "/9j/4AAQ";

string Orig = System.Text.Encoding.Unicode.GetString(Convert.FromBase64String(profilepic));

string New = Convert.ToBase64String(System.Text.Encoding.Unicode.GetBytes(Orig));

字符串New返回“ / f // 4AAQ”。

為什么會這樣呢?

你做錯了。 您應該按照以下步驟進行操作:

namespace ConsoleApplication1
{
    using System;
    using System.Text;

    class Program
    {
        static void Main(string[] args)
        {
            string profilepic = "/9j/4AAQ";
            string New = Convert.ToBase64String(Encoding.Unicode.GetBytes(profilepic));
            byte[] raw = Convert.FromBase64String(New); // unpack the base-64 to a blob
            string s = Encoding.Unicode.GetString(raw); // outputs /9j/4AAQ
            Console.ReadKey();
        }
    }
}

您假設示例中以base64編碼的二進制數據包含UTF-16編碼的消息。 事實並非如此, System.Text.Encoding.Unicode類可能會通過丟棄不了解的字節來更改內容。

因此,對返回的字符串的UTF-16編碼的字節流進行base64編碼的結果可能不會產生相同的輸出。

您的輸入字符串包含二進制序列0xff 0xd8 0xff 0xe0 0x00 0x10(以十六進制表示)。 將此解釋為UTF-16LE(與System.Text.Encoding.Unicode使用),第一個字符將是0xffd8,但會以0xfffd的形式放置在字符串中,這說明了更改。

我嘗試使用Encoding.UnicodeEncoding.UTF8Encoding.Default對其進行解碼,但是它們都不產生任何可理解的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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