コンピュータは文字をすべて文字コードという数値で処理しますが、改行を表すのに用いられるコードが改行コードです。改行コードはOSによって次のように異なります。
OS | コード表記 | 16進表記 | 10進表記 | エスケープ表記 |
---|---|---|---|---|
Linux/Unix | LF | 0A | 10 | \n |
Windows | CR LF | 0D 0A | 13 10 | \r\n |
MacOS 9以前 | CR | 0D | 13 | \r |
MacOS X以降 | LF | 0A | 10 | \n |
CR や LF は下記の意味を持ちます。
Linux/Unix 系では LF のみ、MacOS 9以前では CR のみで改行(1行下の先頭)を表すのに対し、Windows 系では行の先頭に移動して1行下に移動するという意味で CR LF を(広義の)改行コードとしています。
メモ帳(notepad.exe)でテキストファイルを開くと右下に [Windows(CRLF)]、[Unix(LF)] などと表示されます。VSCode など他のエディタでも画面の右下や [名前をつけて保存] の際に表示されることが多いようです。
file コマンドで確認することができます。Unix(LF) であれば改行コード情報は表示されず、Windows(CR LF) であればその旨が表示されます。
$ file linux.txt linux.txt: UTF-8 Unicode text $ file win.txt win.txt: UTF-8 Unicode text, with CRLF line terminators
od コマンドで調べることもできます。0d 0a があれば Windows(CR LF)、0a のみであれば Unix(LF) です。
$ od -tx1z win.txt 0000000 41 41 41 0d 0a 42 42 42 0d 0a >AAA..BBB..< 0000012
hexdump コマンドで調べることもできます。\r \n であれば Windows(CR LF)、\n のみであれば Unix(LF) です。
$ hexdump -c win.txt 0000000 A A A \r \n B B B \r \n 000000a
cat コマンドの -e オプションで調べることもできます。^M$ と表示されれば Windows(CR LF)、$ のみであれば Unix(LF) です。
$ cat -e linux.txt AAA$ BBB$ $ cat -e win.txt AAA^M$ BBB^M$
基本的に Linux/Unix の場合と同様です。ターミナルから file や od コマンドを使用して調べます。
テキストエディタの改行コード変換機能を利用します。
sed コマンドを使用します。
# CR LF を LF に変換 $ sed 's/\r//' win.txt > linux.txt # LF を CR LF に変換 $ sed 's/$/\r/' linux.txt > win.txt
基本的に Linux/Unix の場合と同様です。ターミナルから sed コマンドを使用して変換します。
HTMLファイルであれば、どの改行コードであってもブラウザが適切に処理してくれますが、CGIスクリプトはOSに適した改行コードでなければエラーになってしまいます。Web サーバーは Linux/Unix 系が使用されていることが多く、Windows(CR LS) の改行コードを Unix(LF) に変換してやる必要があります。多くの FTP クライアントソフトは CGI 転送時に改行コードを自動変換する機能を備えています。
FTPクライアントソフトにおいて、改行コードを変換するモードと変換しないモードがあります。