0

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

关于为什么会发生这种情况的任何想法?

4

2 回答 2

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();
        }
    }
}
于 2013-10-13T09:08:33.947 回答
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.Unicode,Encoding.UTF8和对其进行解码Encoding.Default,但它们都没有产生任何可以理解的东西。

于 2013-10-13T09:05:14.010 回答