2013-10-13 14 views
0

我想一個實驗,一個base64string轉換爲字符串,然後回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)); 

字符串回報「/ F // 4AAQ」。

任何想法爲什麼會發生這種情況?

+1

這可能有助於http://stackoverflow.com/a/19025587/2530848 –

+0

什麼是Base64編碼字符串「profilepic」?任意字節? –

回答

1

你做錯了。你應該這樣做如下:

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(); 
     } 
    } 
} 
1

您假定示例中base64編碼的二進制數據包含UTF-16編碼的消息。這可能不是這種情況,並且System.Text.Encoding.Unicode類可以通過丟棄它不理解的字節來改變內容。

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

您的輸入字符串包含二進制序列0xff 0xd8 0xff 0xe0 0x00 0x10(十六進制)。將此解釋爲UTF-16LE(與System.Text.Encoding.Unicode一起使用),第一個字符將爲0xffd8,但放在字符串中作爲0xfffd,這解釋了更改。

我試着用Encoding.UnicodeEncoding.UTF8Encoding.Default對它進行解碼,但是沒有一個產生任何可理解的東西。

+0

謝謝你的洞察力。我會記住在下次我搞亂不同的編碼時記住這一點。 – Eric

相關問題