base64string to string to base64string

时间:2013-10-13 08:31:05

标签: c# asp.net asp.net-mvc

我正在尝试将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”。

有关为何发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:2)

你做错了。你应该这样做:

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 :(得分:1)

您假设示例中的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对其进行解码,但这些都没有产生任何可理解的内容。