改行コードややこしくね?

Windowsでコード書いて、Linuxサーバで実行して、家ではMacを使って…などをしていると改行コードが「あぁ!」っと定期的になる。

とくに¥r¥n?¥n¥r?どっちだっけ?や、Linuxが¥nでMacが¥rだよな??CRが¥n?なんだっけ?^Mってなんだよといった感じで混乱する。

良い覚え方はないものかと経緯を調べたらすんなり覚えれたので今更ながらメモ。

改行コードまとめ

OS 表記 改行コード 向き
Linux、MacOS(X以降) LF ¥n
MacOS(9以前) CR ¥r
Windows CR+LF ¥r¥n ↵=←+↓

上記表の向きに注目してもらいたい。
WindowsのCR+LFは←+↓なことが分かる。

覚え方

基本は(古いMacを使っていない限り) ¥n(↓)と¥r¥n(↵)だけ覚えておけばよさそう。
¥r¥nの順番は「↵」を思い出して↵=←+↓(見ためが)なので↓は¥nだから最後にきて…と覚えた。 ※MacではショートカットキーでCtrl+nが↓キーの意味なので、n = ↓ は私にとって覚えやすかった

^Mはなんぞ

WindowsのファイルをLinuxで開くと、^Mとなることがある。
これはWindowsの改行コードがCR+LF(¥r¥n)なのでLinuxで開くとLF部分(¥n)だけ認識されてCR(¥r)が残るのが原因のようだが、なぜ¥rと表示されないのか調べた。

たとえばWindowsで

aaa
bbb

という文字列があったとする。
改行コードを表記すると以下のようになる。 aaa¥r¥nbbb

さらにWindows内部ではASCII文字コード(16進数表記)で61 61 61 0d 0a 62 62 62として扱われている。
ここで61と62はそれぞれa,bであり、0d,0aが¥r,¥nに該当する。

このファイルをLinuxで開くと、 Windowsと同じように61はaで62はbと改行コードのところで0dは^M(文字として表示)で0aが改行処理される。

長々と書いたが、 ¥rはエスケープシーケンスとしての表記であり、実際は0dであり文字としては^Mなんだと思う。間違っていたら指摘してください。

ASCII文字コード参考

http://www.geocities.co.jp/Technopolis/6545/moji/ascii.html

20170801073109.png