如何对 string 进行Base64编码,解码?

咨询区

  • Kevin Driedger

  1. 如何将指定的 string 编码成 base64。

  2. 如何将 base64 解码成 string。

回答区

  • andrew.fox

我来分享下对这个问题的处理吧:

  1. 对 Encoding 类进行扩展,当然扩展方法还支持各种编码格式,不仅仅是 UTF8。

  2. 还一个好处是对 null 的支持,毕竟在真实项目中你总会遇到的。

代码如下:


namespace MyApplication.Helpers.Encoding
{
    public static class EncodingForBase64
    {
        public static string EncodeBase64(this System.Text.Encoding encoding, string text)
        {
            if (text == null)
            {
                return null;
            }

            byte[] textAsBytes = encoding.GetBytes(text);
            return System.Convert.ToBase64String(textAsBytes);
        }

        public static string DecodeBase64(this System.Text.Encoding encoding, string encodedText)
        {
            if (encodedText == null)
            {
                return null;
            }

            byte[] textAsBytes = System.Convert.FromBase64String(encodedText);
            return encoding.GetString(textAsBytes);
        }
    }
}

然后像下面这样用。


using MyApplication.Helpers.Encoding; // !!!

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Test2();
        }

        static void Test1()
        {
            string textEncoded = System.Text.Encoding.UTF8.EncodeBase64("test1...");
            System.Diagnostics.Debug.Assert(textEncoded == "dGVzdDEuLi4=");

            string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded);
            System.Diagnostics.Debug.Assert(textDecoded == "test1...");
        }

        static void Test2()
        {
            string textEncoded = System.Text.Encoding.UTF8.EncodeBase64(null);
            System.Diagnostics.Debug.Assert(textEncoded == null);

            string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded);
            System.Diagnostics.Debug.Assert(textDecoded == null);
        }
    }
}

  • Zeigeist

其实这就一行代码的事。。。

  1. Encode:


string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes("inputStr"));

  1. Decode:


string inputStr = Encoding.UTF8.GetString(Convert.FromBase64String(encodedStr));

点评区

看了下 Convert.FromBase64String 的源码,在入参为null的情况下会抛出异常。


public static string ToBase64String(byte[] inArray)
{
 if (inArray == null)
 {
  throw new ArgumentNullException("inArray");
 }
 return ToBase64String(inArray, 0, inArray.Length, Base64FormattingOptions.None);
}

我觉得项目中这种反馈肯定是不能接受的,所以哈,用一个扩展方法挺好,学习了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值