首页 > 学院 > 开发设计 > 正文

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

2019-11-17 02:18:38
字体:
来源:转载
供稿:网友

简单所以不要忽视,关于/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","").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作为换行符。


上一篇:14反射程序集

下一篇:C#获取硬件信息

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表