在纯文本的处理中,肯定会遇到换行的处理.而Linux和win的处理是有差异的,在这次写的Linux和win的服务器交互XML文件的程序中暴露出这个问题了.
由于XML是一种用来存储的纯文本信息,在传输中就可以不考虑诸如字节序等的问题,对其使用字符串处理的函数对其进行处理也就显得比较得心应手.
1.首先说明一下CR和 LF
CR和LF是用ASCII的控制字符(ASCII分为可显示的和不可显示的,使用UE打开的时候,可显示的就显示为字符,不可显示的就显示为点),它们的值为
<CR> 0x0D 13 '/r'
<LF> 0x0A 10 '/n' (有的ASCII 写作 <NL>,也就是new line的意思,这样似乎好理解下)
CR的意思是:carriage return,马车返回,也就是回车的意思(翻译是从这里来的,英文取的应该是引申的意义)
LF的意思是:line feed:行满了,也就是说本行已满,下面的内容为下一行的(这就是要换行的意思了)
在缓存中插入以上字符,在被显示的时候就会显示为特定的模式,如以下的字符
ABCD<CR><LF>EFG
就会被显示为:
ABCD
EFG
2.从存储的角度上看,<CR>和<LF>也是占用1个字节,和其他字符是一样的.
3.从操作系统使用的角度看下如何表示换行
Dos和windows | 回车+换行CR/LF |
UNIX/Linux | 换行符LF |
MAC OS | 回车符CR |
在XML标准中,使用<CR><LF>的方式表示换行,也就是说会在行的末尾看到 0d 0a 2个连续的字符.
在XML中的tab使用插入 /t 来表示的(vertical tab,水平的一个tab的意思),插入/b就是backspace退格的意思(删除一个字符),插入space就是插入一个空格的意思.
4.实现的时候要怎么做:
(1).在Linux下如果对本件进行读取的时候要按照二进制的形式来进行,这样文件中就不会有Linux特有的回车和换行来造成影响,open的时候加上b这个标志位
fd = fopen(“path”, “wb+”)
这样只是更好一些,不加也是不影响操作的(就具体的不同只要写程序测试下,这里mark下)
(2).如果是在缓存中的操作,那么对缓存写什么就是什么,就无需担心不同操作系统的特殊处理,写入你想要的信息就是了