改行は、プラットフォームに応じて、キャリッジ・リターン(CR)、ライン・フィード(LF)、CRLF、改行(NEL)になります。
改行はプラットフォームによって異なる文字で表される上に、、同じプラットフォームであってもその動作は曖昧です。
これは大きな問題です。特にWebの場合、1台のコンピュータ上のテキストが多くのソースから生成されている場合があります。
多くの場合、文字セットの変換時に、これらの文字は対応するUnicodeに直接変換されます。つまり、純粋なUnicodeを扱うプログラムであったとしても、上記の問題を考慮する必要があります。
Unicode | ASCII | EBCDIC 1 | EBCDIC 2 | |
|---|---|---|---|---|
CR | 000D | 0D | 0D | 0D |
LF | 000A | 0A | 25 | 15 |
CRLF | 000D 000A | 0D 0A | 0D 25 | 0D 15 |
NEL | 0085 | 85 | 15 | 25 |
VT | 000B | 0B | 0B | 0B |
FF | 000C | 0C | 0C | 0C |
LS | 2028 | n/a | n/a | n/a |
PS | 2029 | n/a | n/a | n/a |
EBCDICシステムでは、LFおよびNELという2つのマッピングが使用されます。
最初のEBCDIC列は、MVSオープン・エディション(CP1047を含む)マッピング、2番目の列はCDRAマッピングです。
ASCIIベースのLinux環境や、Linuxの利用を前提とする一部のデータ転送プロトコルでLF文字を改行として扱う場合、この違いが生じます。
2番目の列はLFのEBCDICおよびASCIIの両方の標準定義に基づいています。
実際はNELはASCIIでは定義されていません。C1制御としてISO6429で定義されています。
詳細については、以下を参照してください。