base64string 到字符串回到 base64string

本文关键字:base64string 字符串 | 更新日期: 2023-09-27 18:35:18

我正在尝试一个实验,将base64字符串转换为字符串,然后再转换回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"。

有什么想法为什么会这样吗?

base64string 到字符串回到 base64string

你做错了。您应该按如下方式进行操作:

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来解码它,但没有一个能得到任何可理解的东西。