改行コード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/05 21:29 UTC 版)
プログラミングにおける改行コード
複数のオペレーティングシステムに対応できるプログラムを記述するために、プログラミング言語は異なる改行コードを扱うためにある程度の抽象性を提供している。
C言語では'\n'
(改行)と'\r'
(復帰)の2つのエスケープシーケンスを提供している。言語処理系はこれらのエスケープシーケンスをそれぞれ異なった環境依存のchar
型に収まる範囲のバイト列に変換する。例えばUNIXやWindows上の一般的な処理系ではそれぞれ、0A
(16進)と0D
(16進)である。
ただし、I/O用のライブラリ中で'\n'
に相当する数値(上記の例では0A
(16進))が特殊な値として処理されるシステムもある。これらの出力関数ではテキストモードで開かれたファイルにデータを出力する時、'\n'
の部分がシステムで使用されている改行コード列に変換された文字列がファイルに出力される。例えば、UNIXでは、改行コード列は「0A
(16進)」であり、Windowsでは「0D
0A
(16進)」、Macintoshでは「0D
(16進)」である。また、入力関数fgets
やfread
、read
はテキストモードで開かれたファイルからデータを読み込む場合、ファイル中にシステム依存の改行コード列があれば、その部分を'\n'
に対応する数値に変換したものを変数に格納する。ファイルがバイナリモードで開かれている場合には、どの入出力関数も数値を変換をせずそのままの値として読み書きする。
これらの関数は、「0D
0A
(16進)」の使用を要求する通信プロトコルを使ってテキストをやりとりする場合に問題になる。そのようなストリームに対し、printf
関数などを使い'\n'
を出力すると、Windowsシステムでは期待通り「0D
0A
(16進)」が送信されるが、UNIXでは「0A
(16進)」しか送信されないため、問題となる。解決策として、バイナリモードを使って目的の数値(0D
(16進) 0A
(16進))を直接送るとどのような場合も正しく動作する。
Java言語でも'\n'
(改行)、'\r'
(復帰)の2つのエスケープシーケンスを提供している。言語処理系はこれらのエスケープシーケンスを、それぞれ、16ビットの数値000A
(16進)、000D
(16進)に変換する。
よく使われるjava.io.PrintStream
クラスのprint
メソッドやprintln
メソッド、printf
メソッドは、C言語のprintf
関数とは異なり、これらの数値を特別扱いせず、環境依存の改行コードに変換しない。ただし、printf
メソッドで使われる書式文字列中では「改行」を表現するための特殊な表記として「%n
」を使える。printf
メソッドはこの部分を実行環境依存の改行コードに置換した文字列を出力する。また、いずれのメソッドでも、出力されるバイト数、バイト順については設定された文字符号化方式に依存する。
- 1 改行コードとは
- 2 改行コードの概要
- 3 概要
- 4 プログラミングにおける改行コード
- 5 関連項目
- 改行コードのページへのリンク