如何使:: WriteFile在UNICODE情况下工作?

时间:2012-03-26 06:14:46

标签: c++ unicode mfc mbcs

由于我的MFC程序处于unicode环境,因此下面的代码无法正常工作。

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

结果是“123”,应该是“123456”

我在互联网上发现Unicode BOM可以解决这个问题。 所以我修改了我的代码,如下所示。

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

然而,它没有任何区别。

似乎这是一个简单的问题,但我很想找到解决方案。

任何想法都会受到欢迎。提前谢谢。

2 个答案:

答案 0 :(得分:4)

Writefile不写“text”:它写“Bytes”。 lstrlenW会返回wchar_t的数量。 您将sizeof(wchar_t)乘以,以便为第三个参数提供“字节数来写”

答案 1 :(得分:2)

您不希望使用lstrlenW来确定要写入的数据量 - 您需要告诉WriteFile要写入的字节数,而不是代码点的数量。现在,你告诉它6,这是3个字符的足够字节。