Почему мой std :: wofstream пишет ansi? - PullRequest
1 голос
/ 04 марта 2010

У меня есть широкая строка, и я записываю ее в поток wofstream, который я открыл в двоичном режиме. Когда я смотрю в результирующий файл, он пропускает каждый второй байт.

Я ожидал, что когда я открою файл в visual studio с помощью бинарного редактора, я буду видеть каждый второй байт как ноль, но я не вижу нулей.

Ты знаешь, чего мне не хватает?

Спасибо.


Код выглядит примерно так:

CAtlStringW data = L"some data";
wofstream stream("c:\hello.txt", ios_base:out|ios_base:binary);
stream.write( data.GetBuffer(), data.GetLength() );
stream.close();

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

см. «Содержимое сообщества» внизу страницы. http://msdn.microsoft.com/en-us/library/f1d6b0fk(VS.80).aspx. Короче говоря, вы должны использовать pubsetbuf (), чтобы использовать внутренний буфер на основе wchar_t для вашего потока (вместо основанного на char).

0 голосов
/ 09 марта 2010

Когда вы записываете в файл с использованием выходного широкого потока, в действительности происходит преобразование широких символов в другое 8-битное кодирование.

Если бы вы использовали локаль UTF-8, она конвертировала бы широкие строки в текст в кодировке UTF-8 (но MSVC не предоставляет локали UTF-8), поэтому обычно она пыталась бы конвертировать в некоторую кодовую страницу, например cp1251 или в ASCII. .

...