当前位置: 首页 > news >正文

【第7章 I/O编程与异常】\r\n 和 \n\r是一回事吗?

\r\n 和 \n\r 不是一回事,它们是两种完全不同的字节序列,在语义和实际效果上也完全不同。

一、含义对比

序列 字节(十六进制) 含义


\r\n 0x0D 0x0A 回车(Carriage Return) + 换行(Line Feed)
✅ Windows 标准换行符
\n\r 0x0A 0x0D 换行 + 回车
❌ 不是任何主流操作系统的标准换行符

二、行为差异(以终端/编辑器为例)

  1. \r\n(标准 Windows 换行)
    光标先回到行首(\r),再下移一行(\n)。
    结果:正常换行到下一行开头。
    所有 Windows 程序(记事本、CMD、PowerShell 等)都正确识别。
  2. \n\r(非标准顺序)
    先下移一行(\n),光标停在新行的相同列位置;
    再执行 \r,光标回到该行开头。
    视觉效果看似“换行了”,但:
    在某些终端中可能显示异常(如多出空行或光标错位);
    文本编辑器通常不会将其识别为一个换行符,而是当作两个独立控制字符;
    在按行解析文件时(如 fgets、Python 的 readline()),不会在此处分割行!

三、实际影响示例

假设文件内容为(用转义序列表示):
text
Hello\n\rWorld
Python 读取(默认 newline=None):
python
with open('test.txt', 'r') as f:
lines = f.readlines()
结果:lines = ['Hello\n', '\rWorld\n'] (取决于具体实现,但通常不会在 \n\r 处断行)

实际上,Python 的通用换行模式只识别 \n、\r\n、\r 作为行分隔符,不识别 \n\r。
C 语言 fgets():
只会在遇到 \n 时停止(因为它是 Unix 风格换行);
\r 被视为普通字符,保留在缓冲区中。
Git / diff 工具:
会将 \n\r 视为“内容中的特殊字符”,而非换行,可能导致混乱的 diff 输出。

四、结论
✅ \r\n 是合法且标准的 Windows 换行符。
❌ \n\r 是非标准、无实际用途的错误组合,应避免使用。
💡 记忆技巧:
“先回车,再换行” —— 就像老式打字机:先把打印头归位(\r),再滚纸一行(\n)。
所以正确顺序是 \r\n,而不是反过来。

如果你在代码或数据中看到 \n\r,很可能是程序逻辑错误或字符串拼接失误导致的,建议检查并修正为标准格式(\n 或 \r\n)。

http://www.rkmt.cn/news/56760.html

相关文章:

  • 2025-11-21
  • Gephi如何支持MySQL数据的复杂查询
  • Fisrt Blog
  • c语言和python如何解决文本文件中“不同平台换行符不兼容”问题
  • 完整教程:政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求
  • 如何使用IDM嗅探视频并下载?
  • java数据结构--LinkedList与链表 - 教程
  • Record-X
  • macos: 景观类动态的壁纸和屏保保存在哪里
  • nju实验二 译码器和编码器
  • 第四十六篇
  • 2025年送礼水果排行榜权威推荐,拉吾尤摩赣南脐橙荣登榜首
  • AI救星!8个写毕业论文的实用AI工具大揭秘
  • 数据血缘图在数据错误追溯中的应用指南
  • CSS基础语法 - 指南
  • 「Temp」目录
  • 高中学习机五大品牌终极横评:优缺点一览,找到最适合你的那一款!
  • 开发智联笔记项目时所遇问题(4)
  • 20251121周五日记
  • CrewAI 上手攻略:多 Agent 自动化处理复杂任务,让 AI 像员工一样分工协作
  • 开发智联笔记项目所遇问题
  • 实用指南:【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战
  • 搜维尔科技:利用MANUS数据手套实现灵巧远程操作:对20自由度灵巧手进行控制
  • nju实验一选择器
  • AI浪潮下的新动向:协作、法律与未来工作
  • Day36:2025年10月26日,星期天,休息。
  • 成都合成树脂瓦使用寿命影响因素?成都佳英耀旺告诉你
  • Talent AI ——专家级大模型数据标注平台
  • 团队作业 3
  • for循环的详细解析for...of循环同时获取下标和data