テキスト モードとバイナリ モードの Unicode ストリーム入出力Unicode Stream I/O in Text and Binary Modes

Unicode ストリームの入出力ルーチン (fwprintffwscanffgetwcfputwcfgetwsfputws など) がテキスト モード (既定) で開かれたファイルを操作すると、次の 2 種類の文字変換が行われます。When a Unicode stream I/O routine (such as fwprintf, fwscanf, fgetwc, fputwc, fgetws, or fputws) operates on a file that is open in text mode (the default), two kinds of character conversions take place:

  • Unicode からマルチバイト文字セット (MBCS: Multibyte Character Set) への変換、または MBCS から Unicode への変換。Unicode-to-MBCS or MBCS-to-Unicode conversion. Unicode ストリーム入出力関数をテキスト モードで実行すると、入力ストリームまたは出力ストリームはマルチバイト文字のシーケンスであると想定されます。When a Unicode stream-I/O function operates in text mode, the source or destination stream is assumed to be a sequence of multibyte characters. このため、Unicode ストリーム入力関数はマルチバイト文字をワイド文字に変換し、 mbtowc 関数を呼び出した場合と同様の効果を得ます。Therefore, the Unicode stream-input functions convert multibyte characters to wide characters (as if by a call to the mbtowc function). 同様の理由で、Unicode ストリーム出力関数は、 wctomb 関数が呼び出されたかのように、ワイド文字をマルチバイト文字に変換します。For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters (as if by a call to the wctomb function).

  • 復帰改行 (CR-LF) の変換。Carriage return-line feed (CR-LF) translation. CR-LF 変換は、MBCS から Unicode への変換の前 (Unicode ストリーム入力関数の場合) と Unicode から MBCS への変換の後 (Unicode ストリーム出力関数の場合) に行われます。This translation occurs before the MBCS - Unicode conversion (for Unicode stream input functions) and after the Unicode - MBCS conversion (for Unicode stream output functions). 入力時には、CR-LF の組み合わせが 1 つの LF 文字に変換されます。During input, each carriage return-line feed combination is translated into a single line feed character. 出力時には、LF 文字が CR-LF の組み合わせに変換されます。During output, each line feed character is translated into a carriage return-line feed combination.

ただし、Unicode ストリーム入出力関数をバイナリ モードで実行すると、ファイルが Unicode であると想定されるため、入出力時に CR-LF 変換も文字変換も行われません。However, when a Unicode stream-I/O function operates in binary mode, the file is assumed to be Unicode, and no CR-LF translation or character conversion occurs during input or output. wcin を UNICODE テキスト ファイルに対して正しく使用するには、_setmode( _fileno( stdin ), _O_BINARY ); 命令を使用します。Use the _setmode( _fileno( stdin ), _O_BINARY ); instruction in order to correctly use wcin on a UNICODE text file.

関連項目See also

カテゴリ別ユニバーサル C ランタイム ルーチンUniversal C runtime routines by category
入出力Input and Output