Ввод-вывод в поток в кодировке Юникод в текстовом и двоичном режиме
Когда подпрограмма потокового ввода-вывода Юникода (например, fwprintf
, fwscanf
, fgetwc
, fputwc
, fgetws
или fputws
) работает с файлом, открытым в текстовом режиме (по умолчанию), выполняются два типа преобразования символов:
Преобразование Юникод-в-MBCS или MBCS-в-Юникод. Если функция ввода-вывода потока Юникода работает в текстовом режиме, исходный или конечный поток рассматривается как последовательность многобайтовых символов. Поэтому входные функции потока Юникода преобразуют многобайтовые символы в расширенные (как если бы для этого вызывалась функция
mbtowc
). По той же причине выходные функции потока Юникода преобразуют расширенные символы в многобайтовые (как если бы для этого вызывалась функцияwctomb
).Преобразование символов возврата каретки — перевода строки (CR-LF). Это преобразование происходит перед преобразованием MBCS — Юникод (для функций потокового ввода Юникода) и после преобразования Юникод — MBCS (для функций потокового вывода Юникода). Во время ввода каждое сочетание "возврат каретки — перевод строки" преобразуется в один символ перевода строки. Во время вывода каждый символ перевода строки преобразуется в сочетание "возврат каретки — перевод строки".
Однако если функция потокового ввода-вывода Юникода работает в двоичном режиме, предполагается, что файл будет в Юникоде, и преобразование CR-LF или преобразование символов во время ввода или вывода не производится. Для правильного использования wcin
с текстовым файлом Юникода примените инструкцию _setmode( _fileno( stdin ), _O_BINARY );
.
См. также
Универсальные подпрограммы среды выполнения C по категориям
Входные и выходные данные