简单所以不要忽视,关于\r\n和\n程序员应了解的实际应用

来源:互联网 发布:剑灵人女捏脸数据图文 编辑:程序博客网 时间:2024/05/17 02:44

众所周知,\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","").Length2sqlParams.ElementAt(1).Value.ToString().Length4

可以看到,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作为换行符。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机被病毒入侵怎么办 苹果手机不息屏怎么办 苹果手机散屏怎么办 苹果手机屏幕死机了怎么办 苹果手机屏死机怎么办 微信号账号异常怎么办 手机设置加密了怎么办 华为手机触屏坏了怎么办 安卓启动器停止怎么办 手机显示停止运行怎么办 手机来电被拦截怎么办 手机被加黑名单怎么办 手机短信被屏蔽了怎么办 手机信息被拦截怎么办 手机有感染病毒怎么办 华为p10速度慢怎么办 华为手机清理慢 怎么办 华为手机有回音怎么办 手机没有返回键怎么办 手机总显示内存不足怎么办 扩音器耳麦接触不良怎么办 音响插头接触不良怎么办 华为手机耳机声音小怎么办 苹果耳机孔变形怎么办 耳机孔松了怎么办 荣耀9青春版费电怎么办 华为双清了怎么办 华为开不开机怎么办 华为手机黑屏打不开怎么办 荣耀v8指纹消失怎么办 耳机话筒进水了怎么办 beats耳机进水了怎么办 音量孔进水了怎么办 苹果手机屏幕进水了怎么办 耳机孔进水了怎么办 华为v10声音小怎么办 荣耀v10声音小怎么办 华为变耳机模式怎么办 小米六耳机模式怎么办 苹果成耳机模式怎么办 苹果调耳机模式怎么办