Как заставить :: WriteFile работать в условиях UNICODE? - PullRequest
1 голос
/ 26 марта 2012

Этот код ниже не работает должным образом, так как моя программа MFC работает в Юникоде.

::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr);
::CloseHandle(hFile);

Результат - «123», который должен быть «123456»

Я обнаружил в Интернете, что спецификация Unicode может решить эту проблему. Поэтому я изменил свой код так, как показано ниже.

WORD Unicode = 0xfeff; // UNICODE BOM
::WriteFile(hFile, &Unicode, 2, &dwByte, nullptr);
::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr);
::CloseHandle(hFile);

Однако, это не имеет никакого значения.

Похоже, это простая проблема, но я теряюсь в поисках решения этой проблемы.

Любая идея будет более чем приветствоваться. Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Writefile не пишет «текст»: он пишет «Байт». lstrlenW возвращает число wchar_t. Вы умножаете на sizeof(wchar_t), чтобы дать третьему параметру "число байтов для записи"

2 голосов
/ 26 марта 2012

Вы не хотите использовать lstrlenW для определения объема записываемых данных - вам нужно указать WriteFile количество записываемых байтов, а не количество кодовых точек. Прямо сейчас вы говорите 6, что достаточно для 3 байтов символов.

...