关于回车符、换行符
打字机(这个组里用过原始机械打字机的人不多)上有两个机械装置,一个是“回到句首”,另一个是“换行”,真正使用时这两个机械装置是联合在一起的,成为“回到句首并换行”,就是 ENTER 键的作用。这就是我们所说的"回车".
“回到句首”在英文里是 Carriage Return, 就是让那个“附带着纸的转盘回到原始位置,打字口对着行首”。
“换行”在英文里是"Line Feed",让纸往上走1行,打字口就对着下一行。有时也可以翻译成“进纸”。
所以有时你能看到 CRLF,就是指这两个操作。
在电脑发明之后,国际标准设计了 ASCII表,比如 用65来表示A,66表示B;其中还用10(十六进制的 0x0A)来表示换行 Line Feed, 13(十六进制的 0x0D)来表示回到句首 Carriage Return。在Word, textpad上,只要发现文件里这字节是10和13在一起,就从下一行开头显示下一个字节。
这样的“不能直接显示,但是有意义”的字符我们叫做“控制字符”。
在Unix/Linux/Mac里,设计人员偷懒,因为这两个字节总是连在一起的,那么就用其中一个就足以表示换行(并回到句首)了,所以他们只用 ASCII 10 Line Feed 来做这件事情。Linux是爽了,但是跟Windows交换文件时就经常出现混乱,所以还特地写了两个程序来替换回车符,一个叫做 dos2unix,另一个叫做 unix2dos (命名很没有创新感)。
总说“ASCII 13 Carriage Return ”和 “ASCII 10 Line Feed ” 很麻烦,写在程序上也乱,所以我们给了这两个字符别称,第一个叫做 '\r', 第二个叫做 '\n' 。在C语言里,单引号表征字符,比如 char c='\n'; 大家一看就知道这是一个ascii 10 的控制字符,在显示时应该走到下一行;而如果用 string s="\n"; 这就是两个字符,分别是 ascii=92 的'\'和 ascii=110的'n'。 在python语言里没有单引号和双引号的区别,所以它规定:如果 \ 后面带着有意义的字母,比如 \r, \n, \t, \f ,它就认为这是控制字符,就把 "\" 和后面的字母 (这两个字符)记录成一个控制字符的ascii码。 如果你要拒绝这个转义,在代码里你要写两个斜杠。例子:
>>> print("a\nb")
a
b
>>> print("a\\nb")
a\nb
0 Comments:
<< Home