[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

news2025/1/8 6:06:38

换行回车

回忆上次内容

  • 区分概念
    • terminal终端
      • 主机网络中
        • 最终的 端点
    • TeleTYpewriter
      • 电传打印机
      • 终端硬件
    • shell
      • 终端硬件基础上的
        • 软件壳子
    • Console 控制台
      • 主机旁边 的 控制面板
  • 存储文件 的 时候
    • 我 在文件里 打了回车\n
    • 系统 将0x0a存入字节 进文件
    • 换行 自动就有 回车功能 了吗?🤔
  • 回忆一下
    • 被忽略的 \r

\r

  • \r 也是一个 ascii字符

    • \
      • 转义字符
    • \r
      • 转义序列
  • 什么是 转义 呢?

    • 转义转义 转化含义
    • 把原来 两个字符 : \r
    • 转化为 \r 这样一个字符
  • 没错!

    • \r1ascii字符

图片描述

  • 那么 \r 这一个字符
    • 对应字节 是多少 呢?

字节状态

  • \r 对应的字节是
    • 0x0d

图片描述

  • 这个0x0d
    • 好像 在安徒生童话中 出现过

安徒生童话

  • 文本观看 模式下
    • 自动 回车换行

图片描述

  • 字节观看 模式下
    • 0a
  • 0a前面是0d
    • 0a换行
      • (line-feed)
    • 0d回车
      • (carriage-return)

图片描述

  • 貌似
    • 总是 成对出现的
    • 为什么 呢?

换行 和 回车

  • 换行
    • 对应 字节0x0a
    • Line-Feed
      • 水平 不动
      • 垂直 向上喂纸
    • 所以是 feed

图片描述

  • 回车
    • 对应 字节0x0d
    • Carriage-Return
      • 垂直 不动
      • 水平 到纸张左侧
    • 可移动的打印头
      • 运输字符 的 装置 (Carriage)
      • 回到行首
    • 所以是 Return
  • 这是 个控制信号
    • 不过他俩 经常 联合使用

联合使用

  • CRLF 联合使用时
    • 会将 打印纸张 上移一行
    • 打字位置 将到 新行的最左侧
  • 也就是
    • 今天所理解 的 回车换行

图片描述

  • 电传打字机
    • 渐渐 退出了历史舞台
    • 当初的纸张 变成了 今天的显示器
    • 打字机的按键 也演变为 如今的键盘
  • 甚至 有了 操作系统
    • 操作系统 是 如何理解 回车换行 的呢?

操作系统 Unix

  • 受限于
    • 内存和软盘空间 的 不足
  • 设计者 决定采用
    • 个字符 来表示 换行回车
      • 使用 \n 替代 \r\n
      • 默认 \n = \r\n
    • 个字符干个事

图片描述

  • 类unix(unix-like) 都是如此
    • 包括 BSD、Linux

unix 和 c 的羁绊

  • C语言

    • 延续了 这个惯例
    • \n
      • 既干 \n的活(换行)
      • 又干 \r的活(回车)
  • 输出中有 \n 的话

图片描述

  • 如果只有\n
    • 本应是
      • 下图这样的

图片描述

  • 实际上是
    • 下图这样的

图片描述

  • 是 回车加换行 的
  • 那还有
    • 纯换行 不回车的效果 吗?

纯换行

  • 纯换行效果可以用\v

图片描述

  • \v 在ascii中的含义是VT
    • 垂直制表位

图片描述

  • 序号是 11

图片描述

Commodore64 和 mac

  • Commondore64
    • 一度 也曾 很流行
    • 同样出于 节省空间的目的
      • 使用 \r 代替 \r\n
      • 这 就有分歧
    • Commodore64 影响了 mac
  • mac
    • 早期 也是
      • 使用 \r 代替 \r\n
      • 甚至按键 都叫做 return
  • 后来 为了 和unix保持一致
    • \r 修改为 \n
      • 可能是因为Mac用户
        • 需要用 ssh 命令
          • 连接 unix-like的服务器
          • 换行不统一
          • 文件读取会出现错误
  • 流行的三大系统(类unix、mac、win)
    • 两个都是\n
  • 来来看看 微软的windows

微软

  • DOS系统 是兼容 CP/M 形成的
    • CP/M 使用 \r\n
  • 键盘上 印的名称是enter
    • 符号是
      • 先 LineFeed 再 Return
      • 也是\r\n
    • 对应字节是b"\x0d\x0a"
  • 后来 的 windows
    • 顺着 DOS的惯例

图片描述

  • 跨系统 浏览文档的时候
    • 会有时候 多行 变成 一行
    • 有的会出现 '0D', '^M' 之类的乱码
  • 不只是 windows记事本🗒️
    • 而且 微软office 等
    • 都曾有 这个困扰
  • win10 最新的记事本🗒️
    • 已经 优化

python 解释器的理解

  • 标准 输入输出流
    • python 的 字符输入
      • 靠的是 终端键盘
    • python 的 显示输出
      • 靠的是 终端屏幕
  • 具体字符
    • 显示\n的时候
      • 就会换行
      • LineFeed
    • 显示\r的时候
      • 就会退回到本行开头
      • CarriageReturn

图片描述

  • \n 写入文件的时候
    • 就会以 b"\x0a"的字节形式
      • 存储 在 文件 中
  • \r 写入文件的时候
    • 就会以 b"\x0d"的字节形式
      • 存储 在 文件 中
  • python3解释器 基于 操作系统
    • 操作系统 基于 cpu架构
  • 不管什么样的操作系统cpu 架构
    • 只要是 python解释器
    • 对于\n\r的解释方式 就是统一的
      • \n 换行
      • \r 退到行头
  • 这种统一 是跨平台的
    • 跨系统、跨cpu架构的

总结

  • 对于换行和回车
  • 不同层面的理解
    • 电传打字机
      • 两件事
      • 经常 一起干
      • 但也可以 分别干
    • 不同操作系统
      • unix-like
        • 带头简化 成 \n
        • 步调一致 就好
      • mac
        • 为了 避免麻烦
        • 我和 unix-like一致
      • windows
        • 原来 我用户多
        • 定什么规矩 我说了算
        • 惹了 很多问题
        • 现在 我还是 随大流 吧
    • python 解释器
      • unix-like 做得对
      • 不管 在什么系统、什么架构 上
      • 在我python上 是统一 的
  • 光说不练假把式
    • 我能看看电传打字机吗?🤔
  • 我们下次再看!👋蓝桥->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython
  • 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

航空客运订票系统(C语言,软件用的DEV)

这两天整理之前的作业代码,把自己一点一点敲出来的系统又看了一下,挑几个发出来供大家参考。想要源码、报告可以找我啦,代码的注释之前写的都是非常详细的! 但是不是无偿的啦(不坑,一杯奶茶喽,不…

Java逃逸分析(附实际例子分析)

Java逃逸分析 1. 什么是Java逃逸分析 我们知道对象一般是在堆上生成的,但这并不是绝对的。特例就是今天要说的逃逸分析。 JVM 在分析代码以后,发现一个对象在声明之后,只有在它当前声明的这个函数中调用,那么它就会将这个对象在…

《微SaaS创富周刊》第3期:GPT-3\ChatGPT、Stable Diffusion等AI模型驱动的微SaaS创意盘点

大家新年好!第3期《微SaaS创富周刊》问世啦!本周刊面向独立开发者、早期创业团队,报道他们主要的产品形态——微SaaS如何变现的最新资讯和经验分享等。所谓微SaaS,就是“针对利基市场的SaaS”,特点是一般由个人或者小团…

网络爬虫的危害与防御方法

爬虫程序是一种计算机程序,旨在通过执行自动化或重复性任务来模仿或替代人类的操作。爬虫程序执行任务的速度和准确性比真实用户高得多。爬虫程序在互联网上扮演着各种各样的角色,超过一半的网络流量是由爬虫程序产生的。有些爬虫程序非常有用&#xff0…

v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例

文章目录1、v-show与v-if的共同点2、v-show与v-if的区别3、v-show与v-if的使用场景4、附属到组件和普通元素时的情况4.1、v-show4.2、v-if5、具体实现的效果5.1 查看是否渲染5.2 查看调用的钩子函数6、钩子函数实现的过程分析1、v-show与v-if的共同点 v-show和v-if的作用效果是…

共享模型之管程(五)

1.多线程设计模式 1.1.同步模式之保护性暂停 1.1.1.定义 1>.即Guarded Suspension,用在一个线程等待另一个线程的执行结果的场景中; 2>.使用场景 ①.有一个结果(数据)需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject; ②.如果有结果(数据)不断从一个…

Vitepress(一):基础教程

什么是Vitepress Vitepress是使用Vue3Vite来快速搭建一个个人网站的工具,网站搭建者不需要掌握Vue3,Vite等的具体内容,只需要简单的配置就可以生成Vue风格的个人网站 官方地址:https://vitejs.cn/vitepress/ 本教程希望教会大家…

SD Nand 与 SD卡 SDIO模式应用流程

SD Nand/SD卡 SDIO模式应用流程 文章目录SD Nand/SD卡 SDIO模式应用流程1. 前言1.1 参考文档1.2 概述2. Response响应类型及格式3. 各步骤流程3.1 卡识别流程3.2 通讯速率及总线宽度修改流程3.3 擦除流程3.4 单块读流程3.5 单块写流程3.6 多块读流程3.7 多块写流程4. 结束语SD …

Java初识泛型 | 如何通过泛型类/泛型方法实现求数组元素最大值?

目录 一、引言 二、编程分析 1、泛型类实现 思路 代码 2、泛型方法实现 思路 代码 三、拓展:数组排序(以冒泡排序为例) 1、int类型 原代码 2、泛型类 3、泛型方法 一、引言 给定一个整型数组,求数组中所有元素的最大…

JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)

文章目录前言一、class文件初始化过程1、概述2、初始化过程-案例1a、代码T001_ClassLoadingProcedure 类加载过程b、解析3、初始化过程-案例2a、代码b、解析二、单例模式-双重检查三、硬件层数据一致性1、硬件层的并发优化基础知识b、Intel 的缓存一致性协议:MESI四…

Vivado综合设置之-keep_equivalent_registers

-keep_equivalent_registers即保留等效寄存器,所谓等效寄存器是指共享输入端口(输入时钟端口clk和输入数据端口rst)的寄存器。 勾选它时,意味着Vivado不会对等效寄存器进行优化; 不勾选它时(默认情况&…

eclipse安装UML插件

安装AmaterasUML AmaterasUML 是一个用于 Eclipse 的轻量级 UML 和 ER 图编辑器。 将AmaterasUML的3个jar包拷到Eclpise的plugins文件下: 重启eclipse 在新建菜单中可以发现已经出现了UML文件选项 安装GEF插件(Eclipse2018-12 以后无需安装&#xf…

②电子产品拆解分析-电动牙刷

②电子产品拆解分析-电动牙刷一、功能介绍二、电路分析以及器件作用1、振动电机开关控制电路2、锂电池供电与充电电路三、本产品的优缺点1、优点:2、缺点:一、功能介绍 ①5档工作模式;②2分钟倒计时停止工作;③工作续航一个星期以…

【MySQL】详解索引操作

索引什么是索引?索引的优势和劣势索引类型按数据结构分类按物理存储分类按字段特性分类主键索引唯一索引普通索引全文索引前缀索引按字段个数分类索引操作创建索引创建主键索引唯一索引的创建普通索引的创建全文索引的创建explain工具查询索引删除索引索引最好设置为…

SQL 注入学习路线

学习路线(大致) HTML > SQL > Python > SQL 注入(使用 sqli-labs 靶场来学习 SQL 注入) HTML 视频 【前端开发入门教程,web前端零基础html5 css3前端项目视频教程】 要求 使用该视频进行 HTML 基础部分…

Python之字符串的特点

1.布尔值 Python2中没有布尔值,直接用数字0表示Flase,用数字1表示True。Python3中,把True和False定义成了关键字,但他们的本质还是1和0,甚至可以和数字相加。 >>> a True >>> b 3 >>> …

[多图,秒懂]如何训练一个“万亿大模型”?

1. 背景近几年,随着“大模型”概念的提出,深度学习模型越来越大,如何训练这些大模型成为一个亟待解决的工程问题。最初的视觉模型只有几百兆的参数量,而现在的语言模型中,动则百亿,千亿的参数量&#xff0c…

[golang工作日记] for range 踩坑

1、for range指针赋值 Ops的数据保存在两个表中,一个是ops_tab,另一个是staff_tab,其中ops_tab的staff_id是staff_tab的外键,两个表都有staff_id字段。 type OpsDetail struct {OpsId stringStaffId stringOps *model.Ops…

Node.js安装配置

目录1. 下载node2. 安装3. 检查是否安装成功4. 配置缓存路径5. 实现一个demo1. 下载node 官方地址https://nodejs.org/en/下载长期支持版本 2. 安装 一路next node一起安装npm 这个地方不要勾选 安装成功 3. 检查是否安装成功 cmd运行下面命令 # 查看node的版本 node -v # …

【博客571】“时序敏感应用“ 如何prometheus自定义上报时间戳

“时序敏感应用” 如何prometheus自定义上报时间戳 1、场景 在物理网络监控中,对于流量趋势是极其敏感的,物理网络监控流量的点通常是秒级别甚至毫秒级别,此时这些时许点通过各种上报上传到监控系统中,由于网络波动,可…