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[] { "\r\n" }, 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());
}
}