文本和二进制模式下的 Unicode 流 I/O

当对一个以文本模式(默认方式)打开的文件执行 Unicode 流 I/O 例程(例如 fwprintffwscanffgetwcfputwcfgetwsfputws)时,将会发生两种字符转换:

  • Unicode 转换为 MBCS 或 MBCS 转换为 Unicode。 当 Unicode 流 I/O 函数在文本模式下运行时,源流或目标流将假定为一系列多字节字符。 因此,Unicode 流输入函数将多字节字符转换为宽字符(就像调用 mbtowc 函数一样)。 出于同一原因,Unicode 流输出函数将宽字符转换为多字节字符(就像调用 wctomb 函数一样)。

  • 回车-换行符 (CR-LF) 转换。 此转换发生在 MBCS 到 Unicode 的转换之前(对于 Unicode 流输入函数)和 Unicode 到 MBCS 的转换之后(对于 Unicode 流输出函数)。 在输入过程中,每一个回车-换行符组合将转换为单一的换行符。 在输出过程中,每一个换行符将转换为回车-换行符组合。

但是,当 Unicode 流 I/O 函数以二进制模式运行时,该文件将被假定为 Unicode,并且在输入或输出过程中不会发生 CR-LF 转换或字符转换。 使用 _setmode( _fileno( stdin ), _O_BINARY ); 指令以便正确使用 UNICODE 文本文件上的 wcin

另请参阅

按类别分的通用 C 运行时例程
输入和输出