改行コードCRはなぜ(^M)で\rなのか

Windowsで作ったファイルをLinuxで開くとファイルの末尾とかに^Mがたくさんついて文字化けしちゃったーとかなりますよね。
^Mは改行コード(CR)で、上記状態は改行コードCRLFのファイルを改行コードLFで開いているから起こる事象です。

なおしたければvim

%s/^M//g

と打てばいい。(^Mを入力するには Ctrl+V として制御文字をうつモードに移行して Ctrl+M と打てばOK)

まあそんなことはいいとしてなぜ改行コードCRが^Mなのかを調べてみました。

改行コード

改行コードには2つあります。

通称 英語名 日本語名 アスキーコード 正規表現 表記
CR carriage return 復帰 0x0D \r ^M
LF line feed / newline / end-of-line / EOL 改行 0x0A \n ^K

この2つのコードの組み合わせのどれかで現在PCは動いています。

ASCII文字コードに基づくシステムでは、CR(復帰、0x0D)、LF(改行、0x0A)、またはCR+LFで表している。
LF: UNIXUnix系のシステム。LinuxAIXXenixmacOSBeOSAmigaRISC OSなど。
CR+LF: CP/M、MP/M、MS-DOSOS/2Microsoft Windows
CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9

改行コード - Wikipedia


で、当初のなんでCRが^Mなのかといことですが、実は上記の表をみると答えが書いてあるのです。
CRはアスキーコードで「0x0D」つまり10進数だと13。つまり13番目の制御コードです。*1
で、13番目のアルファベットといえば?? 「M」ですよね
なので^MがCRを意味するのです。

正規表現が「\r」なのはcarriage returnからでしょう。
同じようにLFは11番目で^Kでnew lineから「\n」になっているようです。

たぶんこういうことだと思いますが違う説もあるよとか間違っているよとかあればコメントお願いします

小ネタ

全世界の99.999%以上の人が使うことない機能ですが、
エクセルのユーザー書式内では、「Ctrl+J」を打つことで書式内に改行を埋め込むことができます。
しかしユーザ書式の入力画面は1行しか表示できず改行してしまうと何を打っているのかわからなくなる諸刃の剣、素人にはオススメできない

以下ページの最後のネタで使っています。
garapon.hatenablog.com

*1:0x00もあるので正確には14番目

広告を非表示にする