パソコンを使っていると改行コードという言葉を聞いたことがあるかもしれない。その改行コードも使っているOSによって違いがあるそうです。CRとかLFとか言うそうですがこれはなんでしょう。コンピューターが文字を扱うときには文字コードというものを使うが、その一種がこのCRとLFらしいのです。改行するのになぜ2つのものがあるのか、由来や違いを長い経験をもつプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。経験が長いため古いことに詳しい。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

タイプライターが起源?CRとLFの役割の違い

image by iStockphoto

パソコンのキーボードにはENTERや↩️のようなキーがあります。このキーを押すと今の行の下に新しい行が増えますよね。行を改めるので「改行」と呼びます。この改行に関係するのがCRとLFです。パソコンを使っているともしかすると聞いたことがあるかもしれません。

では改行というひとつの動作になぜCRとLFという2つのものがあるのでしょう。ざっくり言えばCRは先頭に戻ることで、LFが行送りになります。これはタイプライター由来の言葉です。ここではCRとLFの2つがなぜあるのかと、その違いを説明します。

CR=復帰:行頭に戻ること

タイプライターを見たことある方は少ないかもしれません。筆者も現役のタイプライターは見たことがなく、レストランのインテリアとして飾ってあるものを見たくらいです。しかし、パソコンのキーボードの文字の並びなど、タイプライターの影響がそのまま残っているものも。その一つが改行です。

元々のタイプライターでは、文字を打つ部分を先頭に戻すことと、行を送ることは別物でした。その「文字を打つ部分を先頭に戻す」のがCRです。CRはCarriage Returnの略。Carriageとは馬車のこと。タイプライターの紙を載せる部分を馬車に例えたのですね。これが先頭に戻るからCarriage ReturnでCR。日本語では「復帰」と呼びます。昔のキーボードではENTERではなくRETURNと書かれたものも多いです。

LF=改行:行を進めること、必ずしも行頭には戻らない

本来の改行、つまり行を送るのがLFです。Line Feedの略で、Lineは行、Feedは餌という意味。家畜に餌を与えることもFeedと言い、そこから送ることをFeedと言います。さて、LFが改行ならば、CRは何のためにあるのでしょう。実はLFは行を進めるだけ。文字を打つ部分は動かないのです。

なぜかと言うと、タイプライターで行を進めたり戻したりするのと、文字を打つ位置を左端に戻すのは別の動作だったため。ある文字の上に別の文字を重ね打ちすることもできたのです。そのため、左端に戻すCRと行を送るLFは別になっています。

\次のページで「コンピューターで文字を扱う仕組みは?文字コードと制御文字」を解説!/

コンピューターで文字を扱う仕組みは?文字コードと制御文字

image by iStockphoto

タイプライター時代のCRとLFについて説明しましたが、現代のコンピューターでも必要な違いなのでしょうか。それを説明するためにコンピューターと文字の関係を説明します。

文字コードとは文字に振られた番号

コンピューターは0と1ですべてを処理するとよく言われていますよね。数値はそれで扱えるとして、文字はどうやって扱っているのでしょう。実は、コンピュータが扱う文字にはすべて番号が振ってあります。それが文字コード。「A」や「Z」、数字の「1」や漢字の「漢」など、すべての文字には番号が振ってあります。

例えばシフトJISコードやUnicodeというものを聞いたことがあるかもしれませんね。文字に振られた番号にも種類がいくつかあるのです。どちらも文字に番号を振ったものですが、その扱える文字の種類や、振られている番号が違います。そのため、同じ文字コードを使わないと、ファイルの中身が読めなくなるのです。Windowsの利用者同士でやりとりする場合は問題ないことも多いですが、例えばMacやLinuxなど別のOS利用者とのやりとりは注意しましょう。

見えないが重要な制御文字

番号を振ってあるのは文字だけでしょうか。実は改行などの目に見えないものも同じ。それを制御文字や制御コードと呼びます。例えばワープロソフトでは改ページという機能がありますよね。これも制御文字にあります。他には文字を消すBACKSPACEやDEL、カーソル移動も。なぜ制御文字が必要なのでしょう。コンピュータの内部で処理すればよいですよね。

今はパソコンなど個人の手元でコンピューターを使うのが当たり前です。しかし、昔はコンピューターは会社のコンピュータールームにある巨大なもの。そのコンピューターとは別に端末という今でいうキーボードとモニタだけのものを繋いで使っていました。そのため、コンピューターと端末の間でキーボードの操作を伝えるために制御文字が必要だったのです。

見えない制御文字を入力するCONTROLキー

普段、パソコンを使っていると、CTRL-CやCTRL-Vでコピー&ペーストすることがあります。アプリによって機能が違う場合もありますし、先のコピー&ペーストや保存するときに使うCTRL-Sなど、おおむね統一されているものも。この便利なCTRLキーですが、元々は制御文字を入力するためのものでした。

例えば、CRはCTRL-M、LFはCTRL-J、BACKSPACEはCTRL-Hなど。このうち今でも使えるのはCTRL-Hくらいでしょうか。変わったものではCTRL-Gでベルやブザーが鳴りました。専用のキーがあるものも多いのでCTRLキーは不要と思うかもしれません。ただ制御文字は多くのものがあり、すべてに専用キーを用意できないのでCTRLキーを使ったわけです。しかし、今は制御文字を使わなくなったため、アプリごとに便利な機能を割り当てています。

\次のページで「OSによっても違うCRとLFの扱い」を解説!/

OSによっても違うCRとLFの扱い

image by iStockphoto

見えない制御文字の改行ですが、テキストファイルで改行すると見えないだけできちんと改行の制御文字が入っています。その証拠に試しにデスクトップにABC.txtというファイルを作り、中身に「ABC」と入力しましょう。改行するのを忘れないでください。このファイルを右クリックして、プロパティを表示します。すると、サイズが5バイトになっていますよね。ABCの3文字ならば3バイトのはずですよね。この余計な2バイトが制御文字です。

最後に実際のパソコンでの制御文字の扱いを見ていきます。

WindowsではCRとLFの両方が必要

Windowsでは改行を入れると2バイト増えますこの2バイトが改行の制御文字。実はWindowsでは改行はCRとLFの2文字の組み合わせです。改行するたびに入力した文字の後ろに改行のためのCRとLFが追加されます。

実際にテキストファイルを文字コードに直したものを表示すると、以下のようにABCの後に「0d 0a」というものがありますよね。これがCRとLFという制御文字の文字コードです。

>dir ABC.txt ← ファイルリストを表示すると、5バイトと表示される
2022/11/04 14:03 5 ABC.txt
1 個のファイル 5 バイト
>type ABC.txt ← ファイルの内容を表示すると3文字しかない
ABC
>certutil -f -encodehex ABC.txt ABX.hex ← テキストファイルを文字コードにする
入力長 = 5
出力長 = 63
CertUtil: -encodehex コマンドは正常に完了しました。
>type ABX.hex ← 内容を表示すると3文字の後に「0d 0a」が付いている
0000 41 42 43 0d 0a ABC..

LinuxなどのUNIX系ではLFのみでOK

では他のOSではどうでしょうか。実はLinuxなどのUNIX系OSやMacではLFだけで改行を表します。このように改行の扱いもコンピューターやOSの種類で違うのです。例えば、Windowsと同じことをMacでやると、ファイルのサイズは4バイトになります。

以下のようにその中身を表示するとABCの後に「\n」と表示されますよね。表示の仕方が違いますが、これはWindowsで言えば「0a」と同じ。LinuxやMacでは改行はLFだけになります。

% ls -l ABC.txt ← ファイルを表示するとわかりにくいがファイルサイズは4と表示
-rw-r--r--  1 xxxxxxx  staff  4 11  4 14:27 ABC.txt
% cat ABC.txt ← 内容はABCの3文字
ABC
% od -c ABC.txt  ← 文字コードを表示するとABCの後に「\n」が付いている
0000000    A   B   C  \n

\次のページで「どちらも改行コードと呼ばれるがコンピューターの種類で扱いが違う」を解説!/

どちらも改行コードと呼ばれるがコンピューターの種類で扱いが違う

パソコンで行の終わりを表すのが改行普通の文字と違って見えませんが、ファイルサイズを見れば見えない文字である改行という制御文字がファイルの中にあるのがわかりますWindowsでの改行はCRとLFの2文字です。これは元々はタイプライターで文字を打つ位置を左端に戻すCarriage Return行を送るLine Feedの略タイプライターでは別の動作だったので別れているのです。

ただ、これも別のコンピューターでは違います。例えばLinuxやMacではLFだけで改行です。CRとLFの違いは歴史的な経緯で違うのですが、改行がCRとLFか、LFだけなのかも注意が必要になります。

" /> 改行コードのCRとLFの違いとは?文字コードやOSによる違いもプログラマーがわかりやすく解説 – Study-Z
IT・プログラミング雑学

改行コードのCRとLFの違いとは?文字コードやOSによる違いもプログラマーがわかりやすく解説

パソコンを使っていると改行コードという言葉を聞いたことがあるかもしれない。その改行コードも使っているOSによって違いがあるそうです。CRとかLFとか言うそうですがこれはなんでしょう。コンピューターが文字を扱うときには文字コードというものを使うが、その一種がこのCRとLFらしいのです。改行するのになぜ2つのものがあるのか、由来や違いを長い経験をもつプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。経験が長いため古いことに詳しい。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

タイプライターが起源?CRとLFの役割の違い

image by iStockphoto

パソコンのキーボードにはENTERや↩️のようなキーがあります。このキーを押すと今の行の下に新しい行が増えますよね。行を改めるので「改行」と呼びます。この改行に関係するのがCRとLFです。パソコンを使っているともしかすると聞いたことがあるかもしれません。

では改行というひとつの動作になぜCRとLFという2つのものがあるのでしょう。ざっくり言えばCRは先頭に戻ることで、LFが行送りになります。これはタイプライター由来の言葉です。ここではCRとLFの2つがなぜあるのかと、その違いを説明します。

CR=復帰:行頭に戻ること

タイプライターを見たことある方は少ないかもしれません。筆者も現役のタイプライターは見たことがなく、レストランのインテリアとして飾ってあるものを見たくらいです。しかし、パソコンのキーボードの文字の並びなど、タイプライターの影響がそのまま残っているものも。その一つが改行です。

元々のタイプライターでは、文字を打つ部分を先頭に戻すことと、行を送ることは別物でした。その「文字を打つ部分を先頭に戻す」のがCRです。CRはCarriage Returnの略。Carriageとは馬車のこと。タイプライターの紙を載せる部分を馬車に例えたのですね。これが先頭に戻るからCarriage ReturnでCR。日本語では「復帰」と呼びます。昔のキーボードではENTERではなくRETURNと書かれたものも多いです。

LF=改行:行を進めること、必ずしも行頭には戻らない

本来の改行、つまり行を送るのがLFです。Line Feedの略で、Lineは行、Feedは餌という意味。家畜に餌を与えることもFeedと言い、そこから送ることをFeedと言います。さて、LFが改行ならば、CRは何のためにあるのでしょう。実はLFは行を進めるだけ。文字を打つ部分は動かないのです。

なぜかと言うと、タイプライターで行を進めたり戻したりするのと、文字を打つ位置を左端に戻すのは別の動作だったため。ある文字の上に別の文字を重ね打ちすることもできたのです。そのため、左端に戻すCRと行を送るLFは別になっています。

\次のページで「コンピューターで文字を扱う仕組みは?文字コードと制御文字」を解説!/

次のページを読む
1 2 3 4
Share: