改行、タブ、空白文字のカウント
改行文字(LF、CRLF)、タブ、およびさまざまな空白文字が異なるエンコーディングメトリックでの文字列長にどのように影響するかを理解します。
Basic Counting
詳細な説明
空白文字と文字列長
空白文字は不可視ですが文字列長にカウントされます。プラットフォームによって異なる改行コードを使用し、これがバイト数と文字数に直接影響します。
改行スタイル
| スタイル | 文字 | コードポイント数 | バイト数(UTF-8) |
|---|---|---|---|
| Unix/Mac (LF) | \n |
1 | 1 |
| Windows (CRLF) | \r\n |
2 | 2 |
| 旧Mac (CR) | \r |
1 | 1 |
例:同じ内容、異なる改行コード
Line 1\nLine 2\nLine 3 (Unix: 20文字)
Line 1\r\nLine 2\r\nLine 3 (Windows: 22文字)
Windows版は2文字長くなります。各改行が1文字(\n)ではなく2文字(\r\n)を使用するためです。1000行のファイルでは999文字余分になります。
特殊な空白文字
Unicodeはスペースとタブ以外にも多くの空白文字を定義しています:
| 文字 | コードポイント | UTF-8バイト | 名前 |
|---|---|---|---|
| スペース | U+0020 | 1 | 半角スペース |
| タブ | U+0009 | 1 | 水平タブ |
| ノーブレークスペース | U+00A0 | 2 | 改行なしスペース |
| Emスペース | U+2003 | 3 | 全角スペース(組版用) |
| ゼロ幅スペース | U+200B | 3 | 不可視セパレーター |
| 表意文字用スペース | U+3000 | 3 | CJK全角スペース |
隠れた長さ
"Hello World"に見える文字列が、通常のスペースの代わりにノーブレークスペース(U+00A0)を含んでいる場合があります。これは見た目は同じですが、UTF-8で1バイトではなく2バイトのコストがかかります。
プラットフォーム制限への影響
TwitterやSMSの制限で文字を数える場合、空白文字も可視文字と同じようにカウントされます。
ユースケース
異なるOS(Windows vs Unix)のテキストファイルを処理する際、改行コードの違いを理解することは、正確なバイトカウント、diffツール、CI/CDパイプラインやテキスト処理スクリプトでの一貫した動作の確保に重要です。