我正在尝试将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”。
有关为何发生这种情况的任何想法?
答案 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.Unicode
,Encoding.UTF8
和Encoding.Default
对其进行解码,但这些都没有产生任何可理解的内容。