從前,用asp.net core寫了一個給客戶發交易明細的應用,每天發一次,因為是csv格式,當時用的是StringBuilder來一行一行組裝數據,組裝完后,EMali或SFTP給客戶。
后來,為節省服務器資源,需要把服務從windows server遷移到Linux上,經過反復測試,都沒有發現Bug,就上線了。結果悲劇發生了,用戶說我們傳的csv格式與以前不一樣,我們打開怎么看都是對的,后來,在“心(ri)細(ben)”的同事提示下,我們用sakura文本編輯器打開查看,果不其然,每個換行都不一樣,原來在windows下是“\r\n”,在Linux上是“\n”,為什么呢?看代碼吧。
WriteLine("---------StringBuilder---------");
var contentBuilder = new StringBuilder();
contentBuilder.AppendLine("line00001");
contentBuilder.AppendLine("line00002");
contentBuilder.AppendLine("line00003");
var content = contentBuilder.ToString();
Console.WriteLine(content);
//為了顯示出\r\n進行一個替換
Console.WriteLine(content.Replace("\r", "\\r").Replace("\n", "\\n"));
Console.WriteLine();
Console.WriteLine();
//Environment.NewLin也同樣是這個坑
Console.WriteLine("---------Environment.NewLine-------- ");
content = "line0000A" + Environment.NewLine + "line0000B";
Console.WriteLine(content);
Console.WriteLine();
Console.WriteLine(content.Replace("\r", "\\r").Replace("\n", "\\n"));
ReadLine();
這是windows下的輸出
這是mac下的輸出
這是ubuntu下的輸出
這是docker(windows下的WSL)下的輸出
想要更快更方便的了解相關知識,可以關注微信公眾號
