不同系统换行符差异导致的文本读取问题及解决方案
创作时间:
作者:
@小白创作中心
不同系统换行符差异导致的文本读取问题及解决方案
引用
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 格式。
热门推荐
房子中介怎么找,精明选对经纪人技巧
从《周易》到阴阳师:中国古代哲学思想的演变
小众手游排行榜前十名
从活不过两天到长成白胖子:30个流浪猫被爱改变的故事
信仰圣光,魔兽世界职业篇:圣骑士背景及特色,单刷就属它夺目
两线交汇!规划“双子塔”地标!闽侯拟打造一座“地铁之城”!
封神演义:玉虚宫十二金仙与碧游宫四大弟子实力大比拼
2024年全国最好的10所工科大学,浙大位列第二,西安交大也很出色
血常规检查项目结果怎么看是否贫血
“花样”过大年解锁文化消费新场景 传统节日释放“新”活力
ESPN关注泰山亚冠退赛:前所未有的事件,亚冠出线形势完全混乱
歌手刘欢加盟环球音乐 进一步推动中国音乐全球影响力
发泡聚苯乙烯熔点:探索耐热性的极限
学校开展“无烟校园,从我做起”控烟活动
“云游”乌兰察布 这些景点你都“打卡”了吗?
危险的“消”字号鼻炎喷剂:戒不掉的神药,堵不上的漏洞?
新春牌局指南:十部电影里的麻将哲学
写给银行的还款承诺书范本
天疱疮是怎么引起的
连值日人员如何安排每日值勤时间?
怎么提高决策树算法的优化效果?
盛京剑客的十反对与十提倡:一份实用的投资指南
复旦大学的直博政策:欢迎中国籍留学生,挑战公平争议!
写论文必须养成的十大良好写作习惯
《功夫熊猫4》,关于IP构建的新可能
AI作品会侵权吗?我花了一个月时间,调研了你想知道的一切。
《搜神记》:创造性的继承了前代神话鬼怪传说故事
“诗是无形的画”,从古代诗、画的艺术创作,细谈古代诗画的关系
美国学区是如何划分的 - 中国人购买教育房应注意哪些事项?
牙列拥挤的病因及临床表现和诊断