Ввод-вывод в поток в кодировке Юникод в текстовом и двоичном режиме

Когда подпрограмма потокового ввода-вывода Юникода (например, fwprintf, fwscanf, fgetwc, fputwc, fgetws или fputws) работает с файлом, открытым в текстовом режиме (по умолчанию), выполняются два типа преобразования символов:

  • Преобразование Юникод-в-MBCS или MBCS-в-Юникод. Если функция ввода-вывода потока Юникода работает в текстовом режиме, исходный или конечный поток рассматривается как последовательность многобайтовых символов. Поэтому входные функции потока Юникода преобразуют многобайтовые символы в расширенные (как если бы для этого вызывалась функция mbtowc ). По той же причине выходные функции потока Юникода преобразуют расширенные символы в многобайтовые (как если бы для этого вызывалась функция wctomb ).

  • Преобразование символов возврата каретки — перевода строки (CR-LF). Это преобразование происходит перед преобразованием MBCS — Юникод (для функций потокового ввода Юникода) и после преобразования Юникод — MBCS (для функций потокового вывода Юникода). Во время ввода каждое сочетание "возврат каретки — перевод строки" преобразуется в один символ перевода строки. Во время вывода каждый символ перевода строки преобразуется в сочетание "возврат каретки — перевод строки".

Однако если функция потокового ввода-вывода Юникода работает в двоичном режиме, предполагается, что файл будет в Юникоде, и преобразование CR-LF или преобразование символов во время ввода или вывода не производится. Для правильного использования wcin с текстовым файлом Юникода примените инструкцию _setmode( _fileno( stdin ), _O_BINARY );.

См. также

Универсальные подпрограммы среды выполнения C по категориям
Входные и выходные данные