4
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
source link: https://blog.51cto.com/oeasy/5995721
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
回忆上次内容
terminal
终端
- 主机网络中
- 最终的 端点
TeleTYpewriter
- 电传打印机
shell
- 终端硬件基础上的
Console
控制台
- 主机旁边 的 控制面板
- 存储文件 的 时候
- 我 在文件里 打了回车
\n
- 系统 将
0x0a
存入字节 进文件 - 换行
自动
就有 回车功能 了吗?🤔
- 被忽略的
\r
\r
也是一个 ascii字符
\
是
\r
是
- 什么是
转义
呢?
- 转义转义 转化含义
- 把原来 两个字符 :
\
和r
- 转化为
\r
这样一个字符
-
\r
是 1
个ascii
字符
- 那么
\r
这一个字符
- 对应字节 是
多少
呢?
\r
对应的字节是
-
0x0d
- 这个
0x0d
- 好像 在安徒生童话中 出现过
安徒生童话
- 在
文本
观看 模式下
- 自动 回车换行
- 在
字节
观看 模式下
-
0a
0a
前面是0d
- 先
0a
换行
- (line-feed)
- 再
0d
回车
- (carriage-return)
- 总是 成对出现的
- 为什么 呢?
换行 和 回车
换行
- 对应 字节
0x0a
- Line-Feed
- 垂直 向上喂纸
- 所以是
feed
回车
- 对应 字节
0x0d
- Carriage-Return
- 水平
回
到纸张左侧
- 可移动的打印头
- 运输字符 的 装置 (Carriage)
- 所以是
Return
- 这是
两
个控制信号
- 不过他俩 经常 联合使用
- 当
CR
和LF
联合使用时
- 会将 打印纸张 上移一行
- 打字位置 将
回
到 新行的最左侧
- 今天所理解 的 回车换行
- 电传打字机
- 渐渐 退出了历史舞台
- 当初的纸张 变成了 今天的显示器
- 打字机的按键 也演变为 如今的键盘
- 甚至 有了 操作系统
- 操作系统 是 如何理解 回车换行 的呢?
操作系统 Unix
- 内存和软盘空间 的 不足
- 设计者 决定采用
单
个字符 来表示 换行回车
- 使用
\n
替代 \r\n
- 默认
\n
= \r\n
-
一
个字符干两
个事
- 类unix(unix-like) 都是如此
- 包括 BSD、Linux
unix 和 c 的羁绊
- 延续了 这个惯例
\n
- 既干
\n
的活(换行) - 又干
\r
的活(回车)
- 输出中有
\n
的话
- 如果只有
\n
- 下图这样的
- 下图这样的
- 是 回车加换行 的
- 纯换行 不回车的效果 吗?
- 纯换行效果可以用
\v
\v
在ascii中的含义是VT
- 垂直制表位
- 序号是 11
Commodore64 和 mac
- Commondore64
- 一度 也曾 很流行
- 同样出于 节省空间的目的
- 使用
\r
代替 \r\n
- 这 就有
分歧
了
- Commodore64 影响了 mac
- 使用
\r
代替 \r\n
- 甚至按键 都叫做 <kbd>return</kbd>
- 后来 为了 和
unix
保持一致
- 从
\r
修改为 \n
- 可能是因为
Mac
用户
- 需要用
ssh
命令
- 连接
unix-like
的服务器 - 换行不统一
- 文件读取会出现错误
- 流行的三大系统(类unix、mac、win)
- 两个都是
\n
- 来来看看 微软的windows
- DOS系统 是兼容 CP/M 形成的
-
CP/M
使用 \r\n
- 键盘上 印的名称是
enter
- 符号是<kbd>↵</kbd>
- 先 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
- 步调一致 就好
- 为了 避免麻烦
- 我和 unix-like一致
- windows
- 原来 我用户多
- 定什么规矩 我说了算
- 惹了 很多问题
- 现在 我还是 随大流 吧
- python 解释器
-
unix-like
做得对 - 不管 在什么系统、什么架构 上
- 在我python上 是统一 的
- 光说不练假把式
- 我能看看电传打字机吗?🤔
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK