不同系统换行符差异导致的文本读取问题及解决方案
创作时间:
作者:
@小白创作中心
不同系统换行符差异导致的文本读取问题及解决方案
引用
CSDN
1.
https://blog.csdn.net/Beihai_Van/article/details/137437559
在跨平台开发中,不同操作系统对换行符的处理方式存在差异,这可能导致文本读取和显示出现意想不到的问题。本文通过一个具体案例,详细解析了Windows和Linux系统中换行符的差异,并提供了实用的解决方案,帮助开发者避免此类问题。
1 问题现象描述
起因是群友问了这么一个问题
确实很奇怪,按理说第二个printf不会完全不输出,于是想到,会不会是printf缓冲器的锅,让群友尝试刷新缓冲区,无果。
2 解决过程
于是我将代码克隆到本地的win环境运行,却发现输出正常:
这就很奇怪了,我的环境运行正常,而群友运行就不正常,开始怀疑是不是其环境的问题。
此时,注意到其用的是 WSL 的 Ubuntu 环境,于是我尝试在我的 WSL 的 Ubuntu 环境下运行,结果问题真的复现了!
3 原因解释
丢给gpt进行解释,原来我们忽略了一个重要的问题:不同系统的回车换行符是不同的
系统 | 换行符 |
---|---|
Windows | \r\n |
UNIX、Linux | \n |
macOS | \r |
Linux会将连一起的\r\n
解释会回车换行,\n
也会解释为回车换行,但是如果\r
不和\n
一起出现,\r
将被解释为回车符,也就是光标回到当前这个 printf 输出的内容的开始,如果后面继续输出,将会覆盖当前这个 printf 输出的内容。
- 如图,
\r\n
被linux解释为回车换行: - 单独的
\n
也被 linux 解释为回车换行 - 而单独的
\r
被 linux 解释为回车,输出 bb 后,由于光标回到了第一个 b,下次输出的 c 直接覆盖了第一个 b
4 如何避免踩坑
在处理文本文件时,应确保文件格式符合当前系统的要求。
4.1 格式转换
- 如果在 Linux 中,可以使用命令行命令对文件进行格式转换:
# 将UNIX / Linux格式的文件转换为DOS格式
unix2dos 文件名
# 将DOS格式的文件转换为UNIX / Linux格式
dos2unix 文件名
4.2 格式查看
cat -A 文件名
aaaa^M$
表示文件中存在以下内容:aaaa
是4个 ‘a’ 字符^M
表示一个 Windows 风格的回车符 (Carriage Return)$
表示一个 Unix 风格的换行符 (Newline)
这说明该文件使用了 Windows 风格的换行符,而不是 Unix/Linux 的换行符 (\n
)。为了在 Unix/Linux 系统上正确显示该文件,需要使用dos2unix
命令将其转换为 Unix 格式。
热门推荐
山东造双旗币拍出120万天价!揭秘民国钱币收藏市场
汉代高频词:电视剧里经常出现的“未央”,到底什么意思?
如何选择合适的加拿大留学专业?
土木工程院校排名出炉!专业特点分析,就业前景详细分析来了
从冠军谷爱凌看情绪价值在亲子互动中的应用
装修全包需要人盯着吗?
装修中的全包、半包有何区别?到底该怎样选?听听老工长的建议!
楼南光新片遇冷:从僵尸片辉煌到网络电影困境
生日宴会布置指南:从主题选择到细节装饰的全方位指南
《诗词大会》教你找到岁月如诗的心境
晨曦下的诗意生活:散文记录
冬至未至,诗意生活正当时
欧米茄奥特曼:开启奥特曼系列全新篇章
香港嘉德拍卖会高古玉暴涨,市场前景如何?
聖誕季飲食指南!如何在狂歡派對中保持平衡飲食?營養師分享4個關鍵小貼士
乐山钵钵鸡DIY聚会:欢乐共享美食
四川名小吃钵钵鸡在家也能做!
秋冬必吃!四川眉山家庭版钵钵鸡最佳食材推荐
疫情期间社交媒体评论如何影响公众心理?
探寻上古最美的女神仙:长生药的守护者
这种水果吃3粒,就够一天维生素C了
这些名字中带“龙”的食物,你喜欢吃哪个?
龙眼和荔枝哪个好吃 龙眼和荔枝的功效区别
智库观察丨今年荔枝龙眼为何会那么贵?
职场必备:蒸汽吸入和耳道按摩缓解咽鼓管堵塞
球囊扩张技术:咽鼓管堵塞治疗的新突破
2024WTT新加坡大满贯赛程时间公布!CCTV5直播!
国乒在WTT新加坡大满贯赛中多点开花,多场关键比赛传来捷报
双十一京东扫码购,二维码技术大揭秘!
微信支付与京东支付实现互联互通,15亿用户将受益