zl程序教程

您现在的位置是:首页 >  后端

当前栏目

解决服务端换行数据经过输入框处理后字符数变多的问题:如何区分计算机中的换行符、回车符、\n、\r、\r\n 等

字符数据计算机 如何 处理 解决 服务端 换行
2023-09-11 14:19:56 时间

一、问题背景

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了