程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 簡單所以不要忽視,關於\r\n和\n程序員應了解的實際應用,不要忽視程序員

簡單所以不要忽視,關於\r\n和\n程序員應了解的實際應用,不要忽視程序員

編輯:C#入門知識

簡單所以不要忽視,關於\r\n和\n程序員應了解的實際應用,不要忽視程序員


眾所周知,\r叫回車符,\n叫換行符。

由於歷史原因,windows環境下的換行符是\r\n;(文章最後會稍微解釋這個歷史原因)

linux和html等開源或公開標准中的換行符是\n.

 

記錄這篇筆記的原因是:

textarea中含換行符時,在C#中接收後自動增加了一個\r符號。假設這個字段叫Name nvarchar(50),由於自動增加了一個\r符號,在前台驗證明明通過了,但是保存到庫的時候會報錯。因為現在的長度是51.

如果讀者有興趣可以這樣測試:

在<textarea id="name"></textarea>中輸入字符1,然後回車,然後輸入2

在JS中檢測長度得到3,$('#name').val().length===3 is true

在C#中得到長度是4,name.length==4 is true

由於換行符是不可見字符,可以用replace(/\n/g,'').length的方法檢測,如在JS中:

可以看到textarea中沒有\r符號。

再看C#中

sqlParams.ElementAt(1).Value.ToString().Replace("\r\n","").Length
2
sqlParams.ElementAt(1).Value.ToString().Length
4

可以看到,C#中得到的換行符是有\r的。

故會出現我上門說的這個問題。

解決辦法是:

保存數據之前把\r去掉,replace("\r","");

為什麼要這麼做?

即使你不去掉\r,讀出來的數據重新顯示在textarea中的時候,換行符又變換成了\n,沒有\r。

這一切的變化都是操作系統和浏覽器的行為。所以在保存數據庫之前去掉\r是合理的。

在html中顯示只讀文本的時候,別忘了html的換行符是<br/>

所以顯示只讀文本前還要replace('\n','<br/>')。

 

PS:

windows保留\r\n作為換行符的原因:

回車鍵為什麼叫回車鍵,大家有想過沒有,字面意思是回去的車子。

第一台打印機,每一行打印完了之後在打印第二行之前,這個噴墨的玩意兒需要先回到這一行的行首,這叫回車,然後跳到下一行,這才叫換行。\r\n就是回車加換行。反正保留和延續傳統,就一直把換行叫做回車換行。只有windows平台下的技術才是這樣的,所有linux和其他開源標准中都是把\n作為換行符。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved