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"。
有什么想法为什么会这样吗?
你做错了。您应该按如下方式进行操作:
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.Unicode
、Encoding.UTF8
和Encoding.Default
来解码它,但没有一个能得到任何可理解的东西。