[oeasy]python0040_換行與回車(chē)的不同_通用換行符_universal_newlines
換行回車(chē)
回憶上次內(nèi)容
區(qū)分概念
主機(jī)旁邊 的 控制面板
終端硬件基礎(chǔ)上的
軟件殼子
電傳打印機(jī)
終端硬件
主機(jī)網(wǎng)絡(luò)中
最終的 端點(diǎn)
terminal
終端TeleTYpewriter
shell
Console
控制臺(tái)存儲(chǔ)文件 的 時(shí)候
我 在文件里 打了回車(chē)
\n
系統(tǒng) 將
0x0a
存入字節(jié) 進(jìn)文件換行
自動(dòng)
就有 回車(chē)功能 了嗎???回憶一下
被忽略的
\r
\r
\r
也是一個(gè) ascii字符轉(zhuǎn)義序列
轉(zhuǎn)義字符
\
是\r
是什么是
轉(zhuǎn)義
呢?轉(zhuǎn)義轉(zhuǎn)義 轉(zhuǎn)化含義
把原來(lái) 兩個(gè)字符 :
\
和r
轉(zhuǎn)化為
\r
這樣一個(gè)字符沒(méi)錯(cuò)!
\r
是1
個(gè)ascii
字符

那么
\r
這一個(gè)字符對(duì)應(yīng)字節(jié) 是
多少
呢?
字節(jié)狀態(tài)
\r
對(duì)應(yīng)的字節(jié)是0x0d

這個(gè)
0x0d
好像 在安徒生童話中 出現(xiàn)過(guò)
安徒生童話
在
文本
觀看 模式下自動(dòng) 回車(chē)換行

在
字節(jié)
觀看 模式下0a
0a
前面是0d
(carriage-return)
(line-feed)
先
0a
換行再
0d
回車(chē)

貌似
總是 成對(duì)出現(xiàn)的
為什么 呢?
換行 和 回車(chē)
換行
水平 不動(dòng)
垂直 向上喂紙
對(duì)應(yīng) 字節(jié)
0x0a
Line-Feed
所以是
feed

回車(chē)
運(yùn)輸字符 的 裝置 (Carriage)
回到行首
垂直 不動(dòng)
水平
回
到紙張左側(cè)對(duì)應(yīng) 字節(jié)
0x0d
Carriage-Return
可移動(dòng)的打印頭
所以是
Return
這是
兩
個(gè)控制信號(hào)不過(guò)他倆 經(jīng)常 聯(lián)合使用
聯(lián)合使用
當(dāng)
CR
和LF
聯(lián)合使用時(shí)會(huì)將 打印紙張 上移一行
打字位置 將
回
到 新行的最左側(cè)也就是
今天所理解 的 回車(chē)換行

電傳打字機(jī)
漸漸 退出了歷史舞臺(tái)
當(dāng)初的紙張 變成了 今天的顯示器
打字機(jī)的按鍵 也演變?yōu)?如今的鍵盤(pán)
甚至 有了 操作系統(tǒng)
操作系統(tǒng) 是 如何理解 回車(chē)換行 的呢?
操作系統(tǒng) Unix
受限于
內(nèi)存和軟盤(pán)空間 的 不足
設(shè)計(jì)者 決定采用
使用
\n
替代\r\n
默認(rèn)
\n
=\r\n
單
個(gè)字符 來(lái)表示 換行回車(chē)一
個(gè)字符干兩
個(gè)事

類(lèi)unix(unix-like) 都是如此
包括 BSD、Linux
unix 和 c 的羈絆
C語(yǔ)言
既干
\n
的活(換行)又干
\r
的活(回車(chē))延續(xù)了 這個(gè)慣例
\n
輸出中有
\n
的話

如果只有
\n
下圖這樣的
本應(yīng)是

實(shí)際上是
下圖這樣的

是 回車(chē)加換行 的
那還有
純換行 不回車(chē)的效果 嗎?
純換行
純換行效果可以用
\v

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

序號(hào)是 11

Commodore64 和 mac
Commondore64
使用
\r
代替\r\n
這 就有
分歧
了一度 也曾 很流行
同樣出于 節(jié)省空間的目的
Commodore64 影響了 mac
mac
使用
\r
代替\r\n
甚至按鍵 都叫做return
早期 也是
后來(lái) 為了 和
unix
保持一致可能是因?yàn)?code>Mac用戶(hù)
連接
unix-like
的服務(wù)器換行不統(tǒng)一
文件讀取會(huì)出現(xiàn)錯(cuò)誤
需要用
ssh
命令從
\r
修改為\n
流行的三大系統(tǒng)(類(lèi)unix、mac、win)
兩個(gè)都是
\n
來(lái)來(lái)看看 微軟的windows
微軟
DOS系統(tǒng) 是兼容 CP/M 形成的
CP/M
使用\r\n
鍵盤(pán)上 印的名稱(chēng)是
enter
先 LineFeed 再 Return
也是
\r\n
符號(hào)是?
對(duì)應(yīng)字節(jié)是b"\x0d\x0a"
后來(lái) 的
windows
順著
DOS
的慣例

跨系統(tǒng) 瀏覽文檔的時(shí)候
會(huì)有時(shí)候 ?多行 變成 一行
有的會(huì)出現(xiàn)
'0D'
,'^M'
之類(lèi)的亂碼不只是 windows記事本???
而且 微軟office 等
都曾有 這個(gè)困擾
win10 最新的記事本???
已經(jīng) 優(yōu)化
python 解釋器的理解
標(biāo)準(zhǔn) 輸入輸出流
靠的是 終端屏幕
靠的是 終端鍵盤(pán)
python 的 字符輸入
python 的 顯示輸出
具體字符
就會(huì)退回到本行開(kāi)頭
CarriageReturn
就會(huì)換行
LineFeed
顯示
\n
的時(shí)候顯示
\r
的時(shí)候

將
\n
寫(xiě)入文件的時(shí)候存儲(chǔ) 在 文件 中
就會(huì)以
b"\x0a"
的字節(jié)形式將
\r
寫(xiě)入文件的時(shí)候存儲(chǔ) 在 文件 中
就會(huì)以
b"\x0d"
的字節(jié)形式python3解釋器 基于 ?
操作系統(tǒng)
操作系統(tǒng)
基于cpu架構(gòu)
不管什么樣的
操作系統(tǒng)
、cpu 架構(gòu)
\n
換行\r
退到行頭只要是 python解釋器
對(duì)于
\n
、\r
的解釋方式 就是統(tǒng)一的這種統(tǒng)一 是跨平臺(tái)的
跨系統(tǒng)、跨cpu架構(gòu)的
總結(jié)
對(duì)于換行和回車(chē)
不同層面的理解
unix-like
做得對(duì)不管 在什么系統(tǒng)、什么架構(gòu) 上
在我python上 是統(tǒng)一 的
unix-like
mac
windows
帶頭簡(jiǎn)化 成
\n
步調(diào)一致 就好
為了 避免麻煩
我和 unix-like一致
原來(lái) 我用戶(hù)多
定什么規(guī)矩 我說(shuō)了算
惹了 很多問(wèn)題
現(xiàn)在 我還是 隨大流 吧
兩件事
經(jīng)常 一起干
但也可以 分別干
電傳打字機(jī)
不同操作系統(tǒng)
python 解釋器
光說(shuō)不練假把式
我能看看電傳打字機(jī)嗎???
我們下次再看!??藍(lán)橋->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