简单所以不要忽视,关于\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作为换行符。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?