解决服务端换行数据经过输入框处理后字符数变多的问题:如何区分计算机中的换行符、回车符、\n、\r、\r\n 等
一、问题背景
1、文档简介从服务器文档里直接取时,简介是256字符;
2、当编辑时,简介却变成了 260 字符,报错超出限制。
问题:为啥 256 字符经过表单一展示后,再提交到后台就变成了 260 字符呢?
二、涉及知识
\r 是回车,return,使光标到行首
\n 是换行,newline,使光标下移一格
对于换行这个动作,unix 下一般只有一个 0x0A 表示换行("\n"),windows下一般都是 0x0D 和 0x0A 两个字符("\r\n"),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r)。
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即“\r”。
也就是说上述问题:
1、文档简介从服务器文档里直接取时,简介是256字符; - linux 取简介,换行取做 \n
2、当编辑时,简介却变成了 260 字符,报错超出限制。 - windows 输入框简介,换行取做 \r\n,4个换行,所以多了4个 \r 4 个字符
三、\r \n \r\n 回车与换行的区别
public static void main(String[] args) {
String str1 = "微信公众号菜鸟名企梦\n干货多多";
System.out.println(str1);
System.out.println("----------------------------------------");
str1 = "微信公众号菜鸟名企梦\r干货多多";
System.out.println(str1);
System.out.println("----------------------------------------");
str1 = "微信公众号菜鸟名企梦\r\n干货多多";
System.out.println(str1);
System.out.println("----------------------------------------");
}
观察在linux平台的执行结果。
1、回车与换行的区别:
在Windows中:
\r - 回车:即将光标回到当前行的行首(而不会换到下一行),之后的输出会把之前的输出覆盖
\n - 换行,换到当前位置的下一位置,而不会回到行首;
Unix系统里,每行结尾只有“<换行>”,即"\n";
Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”,即"\r";
2、也就是说:
Linux中遇到换行符("\n")会进行回车+换行的操作,回车符(“\r”)反而只会作为控制字符("^M")显示,不发生回车的操作。
而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
3、一个直接后果是:Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
四、应用
在解析字符串,或其他格式的文件内容的时候,经常需要判定回车换行的地方,这个时候就要注意:既要判定"\r\n"又要判定"\n"。
写程序时可能得到一行,将其进行替换掉’\r’,这样能得到所需要的string了
相关文章
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- 宽字符wchar_t和窄字符char区别和相互转换
- Python字符和字符值(ASCII或Unicode码值)转换方法
- 通用合并表存储过程 循环变量与字符连接
- 每日一道 LeetCode (46):无重复字符的最长子串
- 【第3版emWin教程】第26章 字符编码和点阵字体基础知识(重要)
- 字节,字符,Unicode及Web编码
- Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界1 2. 检查条目1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验)1 2.2. 字符黑
- Atitit 歌曲年份抓取的nlp ai项目 原理通过百度搜索,抓取第一页数据,正则数字,过滤年份。。 显示格式。。歌曲,年份,年份周围前后40字符,方便核对 通过百科抓取比较准确 红尘情歌
- Android Studio 报 非法字符: ‘ufeff‘解决
- Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果)
- Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果)
- Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化
- 【华为OD机试】1036 - 统计字符
- 习题 6.7 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
- java GBK字符转换成为UTF-8编码字符
- Linux 字符驱动程序(一)
- r语言去除字符串两端多余空格 r去掉字符串两边的空格trimws ards zhongda xiejianfeng临床数据清洗 字符两边的空格类似于 onehot编码格式
- python里使用difflib库的比较文本时丢弃不要的字符
- 包含utf8字符的 pickle 转 json的大坑处理过程
- 指向字符型数据的指针变量
- 【蓝桥杯每日一练】—字符逆序
- 一文带你弄懂C++中的ANSI、Unicode和UTF8三种字符编码及相互转换