关于\r\n和\n程序员应了解的实际应用
来源:互联网 发布:大连光洋 知乎 编辑:程序博客网 时间:2024/05/16 18:42
简单所以不要忽视,关于\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作为换行符。
- 简单所以不要忽视,关于\r\n和\n程序员应了解的实际应用
- 关于\r\n和\n程序员应了解的实际应用
- 关于\r\n和\n程序员应了解的实际应用
- 关于\r和\n和\r\n
- 关于/r和/n
- \r\n和\n\r的区别?
- 关于\r,\n,\r\n
- 关于\n,\r,\r\n
- /r/n和/n的区别
- /r/n和/n的区别
- /r/n和/n的区别
- \r\n和\n的区别
- \r\n和\n的区别
- 关于/r与/n 以及 /r/n 的区别总结
- 关于/r与/n 以及 /r/n 的区别总结
- 关于"\r","\n","\r\n"区别的实践
- 关于转义字符 \r,\n,\r\n 的区别
- \r 和 \n 和 \r\n的区别是?
- 直男版简单的springAop例子
- HTML区块和布局
- LintCode:统计比给定整数小的数的个数
- [hihocoder 1181 欧拉路 二] Fleury 算法求欧拉回路
- Unreal中的Cross Product(向量积)方向定义
- 关于\r\n和\n程序员应了解的实际应用
- uva 1354 - Mobile Computing
- centos7(x64)安装snort
- 常见错误总结
- PAT甲级.1006. Sign In and Sign Out (25)
- 动态规划问题(一)——原理
- Spring中jdbcTemplate的用法实例
- leetcode之Random Note
- HTML 表单和输入