红联Linux门户
Linux帮助

windows和linux系统下文件中字符串长度不一样

发布时间:2015-11-21 09:44:09来源:linux网站作者:奔跑的路

1.在windows下,文件 1.txt的内容中只有123,3个字符。
1.1在123之后没有换行回车空格键等,此时通过属性显示3字节
1.2在123之后回车1次,此时文件属性显示5字节

2.在linux下,文件 1.txt的内容中只有123,3个字符。
2.1在123之后没有换行回车空格键等,此时通过属性显示4字节
2.2在123之后回车1次,此时文件属性显示5字节


首先要知道在windows下实现换行需要\r 、\n 是0d,0a    而在UNIX,Linux下只要\n即可  \n是0a,因为他们ASCII码是16进制,所以在window下回车占用两个字节,而Linux下回车占用一个字节


所以对于window来说,123没有回车占用3个字节,有回车占用5个字节是很好理解的
让人觉得奇怪的是Linux下,回车一下为什么占用5个字节呢?应该是4个字节才对吧?
我们用vim打开1.txt文件,然后在下面输入 :set list 命令以显示文本中的特殊字符,可以看到下图所示:

windows和linux系统下文件中字符串长度不一样

会发现在行的结尾有两个$ (注:$表示\n换行符),一个$占用一个字节,所以你看到占用了5个字节就不奇怪了
从这里可以知道,Linux下通过界面操作的时候,在行尾输入回车时,不仅在本行添加了换行符,而且在下一行也添加了一个换行符

如果在行里面回车会怎么样呢?
比如我们先输入123,不输入换行保存,查看属性,可查文件大小4个字节,因为在保存时,系统自动添加了一个换行符,可用vim查看到
现在把光标放到2和3之间,按下回车然后保存,它仍然在新行添加了换行符,大小是5个字节

windows和linux系统下文件中字符串长度不一样


其实还有更有意思的:
echo 123 > a          a的 大小是4个字节
echo -n 123 > a      a的大小是3个字节
在windows使用ultraedit创建a.txt,选择utf-8编码,输入123然后回车保存,这时a.txt 大小是4个字节
然后用记事本创建b.txt,输入123然后回车保存,这时b.txt大小5个字节


总结:编码算法的不一样,使windows和Linux的回车大小不一样,Linux在图像界面下回车,会在本行和下一行都添加上一个回车符。


shell中的字符串、数组、数字操作:http://www.linuxdiyf.com/linux/15606.html

Linux shell字符串模式匹配运算符:http://www.linuxdiyf.com/linux/14019.html

Linux shell字符串截取与拼接:http://www.linuxdiyf.com/linux/9890.html