3

Windowsで改行が2バイトになる理由は何ですか?\ n ASCIIでは1バイトだけではありませんか?

4

1 に答える 1

11

歴史的に、改行は2つの文字で構成されていました。U+ 000Dキャリッジリターン(ここではUnicodeを使用しているのは、これが現在使用されているためです。当時はASCIIであったか、おそらくそれでさえなかったでしょう)とU+000A改行です。これらの2つが必要だったのは、一方がプリントヘッドをさらに1行進め、もう一方が次の行の先頭に戻すためです。タイプライター(テレタイプライターは実際にはコンピューターに接続されているだけです)でロール紙を回して、右側のレバーが両方を行うキャリッジを後ろに移動するのと比較してください。

ちなみに、ほとんどのネットワークプロトコルはCR + LFシーケンスを保持しているので、ある意味でここで奇妙なのはUnixです。テレタイプが存在しなくなり、ビデオ端末に置き換えられ、後に端末エミュレーターに置き換えられるまでに、2文字のシーケンスは物理的に必要なくなりました。また、常に2バイトを比較する必要があるため、コードの改行をチェックするのが難しくなります。したがって、(Multics以降の)Unixは、多くのことを単純化する1文字だけを保持することが決定されました。Cは、テキストモードでストリームを読み書きするときに、U+000Aとプラットフォームネイティブの改行シーケンスの間の変換を実行するように後で指定されました。

一方、WindowsはCP/MとDOSを介してCR+LFを継承しており、そのデフォルトを変更する必要があるという有用な理由はありません。下位互換性は常にMicrosoftの強みであり、過去のある時点でそれを破ることはできませんでした(非常に怒っている顧客にとっては、おそらくそうだったでしょう)。

Mac OS(古いもの)は別の奇妙なもので、改行にCRだけを使用していました。

于 2013-03-08T09:17:09.333 に答える