结合XML谈下CR,LF,NL

在纯文本的处理中,肯定会遇到换行的处理.而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).如果是在缓存中的操作,那么对缓存写什么就是什么,就无需担心不同操作系统的特殊处理,写入你想要的信息就是了

你可能感兴趣的:(linux,xml,windows,dos,服务器,存储)