LoginSignup
138
63

More than 5 years have passed since last update.

Windowsメモ帳の「右端で折り返す」で入る謎の改行コード

Last updated at Posted at 2015-06-08

概要

Windowsの「メモ帳」で「右端で折り返す」にすると「右端」で勝手に改行される件について でも報告があるが、Windowsのメモ帳の「右端で改行」の動作がわりとファンタジック(同僚氏談)だったのでまとめてみた。

注: 本挙動はWindows 7までは再現しますが、Windows 10では修正されているそうです。Windows 8でどうなっているかは手元に無いのでわかりません。

再現手順

  • Windowsのメモ帳を起動し、「書式」の「右端で折り返す」にチェックを入れてから、長い文章を入力する。 この状態では、ウィンドウサイズを変えると、入力された内容が追従する。

ウィンドウサイズ変える前
150608_memo1.png

ウィンドウサイズ変えた後(ちゃんと追従する)
150608_memo2.png

  • 「名前をつけて保存」する(例えばtest.txt)。すると、右端に改行コードが挿入され、ウィンドウサイズを変えても入力された内容が追従しなくなる。

保存直後
150608_memo3.png

ウィンドウサイズを変えた後(表示が追従しない)150608_memo4.png

  • メモ帳の内容を別のエディタ(例えばsakuraエディタ)にコピペすると、改行が入っていること、さらに挿入されたコードが「CRCRLF」であることがわかる。ちなみにメモ帳で開いたまま、先ほど保存したファイル(test.txt)を別のエディタで開いても、改行コードは入っていない。つまり、ファイルには保存していない。

150608_memo5.png

  • ここからファンタジー度が増してくる。メモ帳で「保存」してからウィンドウサイズを変更しても内容が追従しないが、その追従していない状態でさらに「保存」してから、「全て選択(Ctrl+A)」すると、慌てて追従する。

  • サイズ変更の方法によっては、表示が正しくなくなる。「保存」してから、「全て選択(Ctrl+A)」した後に、ウィンドウサイズを大きくして、さらに「保存」すると、画面更新に失敗し、一時的に画面に本来よりも多い文字数が表示されてしまう。一度フォーカスを外してから戻すと正しく表示される。

全選択して「保存」
150608_memo6.png

ウィンドウサイズを変えてから「保存」。選択されていない文字が出現する。
150608_memo7.png

コード「CRCRLF」

「表示では改行されているが、保存されない」という改行コードは「CRCRLF」で表現されている。そこで、CRCRLFを吐くコードを書いてみる。

test.cc
#include<stdio.h>

int
main(void){
  const char cr = 0x0d;
  const char lf = 0x0a;
  for(int i=0;i<10;i++){
    printf("%c%c%c%c",'a',cr,cr,lf);
  }
}

上記を実行して、test.txtに吐く。

$ g++ test.cc
$ ./a.out > test.txt
$ cat test.txt
a
a
a
a
a
a
a
a
a
a

メモ帳で読み込んで「右端で改行」にチェックは入った状態で「保存」すると、改行が消える。

$ cat test.txt
aaaaaaaaaa

まとめ

Windowsのメモ帳は、「右端で改行」をするときには内部的に「CRCRLF」を挿入するが、これは「ファイルに保存されない」のではなく、「保存」するときに自動で削除されている。別のプログラムで作成された、CRCRLFを含むテキストを読み込んで保存するときにも削除する。

138
63
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
138
63