uuencode 解码

class Program
    {
        static void Main(string[] args)
        {
            var fileTxt = File.ReadAllText(@"D:REPORT_WIP_20201103.CSV");
            var decodeTxt = UuencodeDecode(fileTxt);
            Console.WriteLine(decodeTxt);
        }

        private static string UuencodeDecode(string encTxt)
        {
            StringBuilder stringBuilder = new StringBuilder();
            string[] lines = encTxt.Split(new string[] { "
" }, StringSplitOptions.None);
            //排除首行begin 尾行end
            for (int i = 1; i < lines.Length - 1; i++)
            {
                if (lines[i].Length > 0)
                {
                    byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(lines[i].Substring(1));
                    stringBuilder.Append(UuencodeDecodeByByte(byteArray));
                }
            }
            return stringBuilder.ToString();
        }

        private static string UuencodeDecodeByByte(byte[] bytes)
        {
            List<char> list = new List<char>();
            List<byte> bits = new List<byte>();
            for (int i = 0; i < bytes.Length; i++)
            {
                var strX2 = Convert.ToString(bytes[i] - 32, 2).PadLeft(6, '0');
                //"`"ASCII 96-32=64 toX2 1000000 (7位)截取后6位
                if (strX2.Length > 6)
                {
                    strX2 = strX2.Substring(strX2.Length - 6, 6);
                }
                list.AddRange(strX2.ToCharArray());
            }
            int iGroupNum = list.Count / 8;
            for (int i = 0; i < iGroupNum; i++)
            {
                string strX2 = new string(value: list.Skip(8 * i).Take(8).ToArray());
                bits.Add((byte)(Convert.ToInt32(strX2, 2)));
            }
            return System.Text.Encoding.ASCII.GetString(bits.ToArray());
        }
    }

 

原文地址:https://www.cnblogs.com/Lv2014/p/13925294.html