\r\n \r转换

网友投稿 833 2022-09-24 10:45:06

\r\n <->\r转换

Windows/DOS与Unix文件格式是不同的,问题一般就是出在/r/n问题上。

回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:Dos和windows采用回车+ 换行(CR+LG)表示下一行(亦即所谓的PC格式,谁让MS最早雄踞PC市场呢,^_^),UNIX采用换行符(LF)表示下一行,MAC机采用回车符(CR)表示下一行。当在不同的系统间传递文件,就要涉及格式的转换。

先搞清楚几个符号 ******************* 0D   CR   ^M   回车 *******************

DOS/Windows文本文件中使用CR(回车\r)和 LF(换行\n), 在文件的行尾的情况是是 '\r\n'

UNIX文本只使用换行符,在行的末尾有一个换行(\n),也就是'\n' 所以在windows下编辑的C程序放在unix下编译会出现"No end of newline"的Warning

两种文件格式之间的转化 Unix -> Dos '\n' -> '\r\n'

//////////////////////////////////////////                while ( (ch = fgetc(in)) != EOF )         {             if ( ch == '\n' )                 putchar('\r');             putchar(ch);         }       //////////////////////////////////////////

只要在Unix文件中出现的'\n'的之前加入一个'\r'字符就可以了

Unix <- DOS '\n' <- '\r\n'

从Dos到Unix的情况复杂点,不能只是把从文件中读出的'\r'去掉就可以了 因为Dos文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。 所以在转换前要判断'\r'是否和'\n'同时出现。 如果同时出现,则去掉'\r' 如果没有同时出现,保留'\n'

//////////////////////////////////////////               cr_flag = 0;    /* No CR encountered yet */         while ( (ch = fgetc(in)) != EOF )         {             if ( cr_flag && ch != '\n' ) {                 /* This CR did not preceed LF */                 putchar('\r');             }             if ( !(cr_flag = (ch == '\r')) )                 putchar(ch);         }

Java中获取行结束符:System.getProperty("line.separator")

更多参考:http://xu020408.blog.163.com/blog/static/26548920094574343117/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何决定发展方向是Windows还是Unix/Linux?
下一篇:专业的网络口碑营销方法应该怎样做?(网络口碑营销策略技巧)
相关文章