改行・タブ・空白文字のエスケープシーケンス

改行、タブ、キャリッジリターン、フォームフィードなどの空白文字がエスケープシーケンスとして文字列内でどのように表現されるかを学びます。\n、\r\n、\t、プラットフォーム固有の改行コードを解説します。

Basic Escaping

詳細な説明

空白文字のエスケープシーケンス

空白文字 — 改行、タブ、キャリッジリターンなど — はソースコード上では目に見えませんが、出力のフォーマットには不可欠です。エスケープシーケンスにより、これらの文字を文字列リテラル内で明示的に埋め込むことができます。

主要な空白エスケープ

\n   → ラインフィード(LF、U+000A)— Unix/macOSの改行
\r   → キャリッジリターン(CR、U+000D)
\r\n → CR+LF — Windowsの改行
\t   → 水平タブ(U+0009)
\v   → 垂直タブ(U+000B)
\f   → フォームフィード(U+000C)

プラットフォーム間の改行コードの違い

最もよくある混乱の原因は、Unix(\n)とWindows(\r\n)の改行コードの違いです。ファイルの読み取りやネットワークプロトコルの処理時には、両方に対応する必要がある場合があります。

HTTPヘッダはRFC 2616で規定されている通り \r\n を使用します。CSVファイルはプラットフォームに関係なく \r\n を使用することが多いです。Gitはチェックアウトとコミット時に改行コードを変換するよう設定できます。

タブ文字

タブ(\t)はTSV(タブ区切り値)ファイル、Makefile(構文的に必須)、Pythonなどのインデントに敏感な言語(ただしスペースが推奨)で多用されます。

複数行文字列

多くの言語では明示的な \n を避ける複数行文字列構文を提供しています。PythonのトリプルクォートやJavaScriptのテンプレートリテラルがその例です。

JSONと空白

JSONは文字列値内の実際の改行を許可しません。すべての空白はエスケープシーケンスで表現する必要があります:改行は \n、タブは \t。JSON文字列内のリテラル改行はパースエラーになります。

エスケープとリテラルの区別

エスケープされたテキストを表示する際、区別を念頭に置いてください:ソースコード内の2文字シーケンス \n は単一の改行バイトを表します。画面上にテキストとして \n が表示される場合、エスケープが解釈されなかったことを意味します — デバッグには便利ですが、出力には適切ではありません。

ユースケース

空白文字のエスケープは、設定ファイルの生成、複数行ログメッセージの構築、CSV/TSVデータの処理、ネットワークプロトコル(HTTP、SMTP)の操作、ターミナル出力のフォーマット、コードジェネレータの構築、改行コードの違いがバグを引き起こすクロスプラットフォームテキストファイルの処理に不可欠です。

試してみる — String Escape/Unescape

フルツールを開く