【问题标题】:base64string to string back to base64stringbase64 字符串到字符串返回到 base64 字符串
【发布时间】:2013-10-13 08:31:05
【问题描述】:

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

对为什么会发生这种情况有任何想法吗?

【问题讨论】:

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


【解决方案1】:

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

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();
        }
    }
}

【讨论】:

    【解决方案2】:

    您假设示例中的 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 对其进行解码,但它们都没有产生任何可以理解的东西。

    【讨论】:

    • 感谢您的洞察力。下次我弄乱不同的编码时,我会记得记住这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多