咨询区
Kevin Driedger:
如何将指定的 string 编码成 base64。
如何将 base64 解码成 string。
回答区
andrew.fox:
我来分享下对这个问题的处理吧:
对 Encoding 类进行扩展,当然扩展方法还支持各种编码格式,不仅仅是 UTF8。
还一个好处是对 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:
其实这就一行代码的事。。。
Encode:
string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes("inputStr"));
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);
}
我觉得项目中这种反馈肯定是不能接受的,所以哈,用一个扩展方法挺好,学习了!