在文本文件上调用ReadFile,得到了奇怪的(日文?)字符

The*_*GiG 3 c c++ io

我使用下一个代码从一个文件中读取所有元素,其中包含有效的句柄hFile,以及我使用它的大小GetFileSize(hFile, NULL).

_TCHAR* text = (_TCHAR*)malloc(sizeOfFile * sizeof(_TCHAR));
DWORD numRead = 0;
BOOL didntFail = ReadFile(hFile, text, sizeOfFile, &numRead, NULL);
Run Code Online (Sandbox Code Playgroud)

操作之后text是日语中的一些奇怪的东西,而不是文件的内容.

我做错了什么?

编辑:我理解这是编码问题,但是如何将文本转换为LPCWSTR以使用WriteConsoleOutputCharacter之类的东西

efo*_*nis 7

现代IDE默认使用Unicode应用程序,_TCHAR实际上就是这样wchar_t.ReadFile()使用简单的字节,如果您使用它_TCHAR直接填充数组,您将获得解释为UTF-16 Unicode的8位字符.这些通常显示为CJK(中国/日本/韩国)字形.

你有三个选择:

  • 将您的程序转换为非Unicode
  • 使用包含Unicode文本的文件(UTF-16编码),或
  • 从文件读取到char数组,然后用于MultiByteToWideChar()将文本转换为Unicode.

如果混合Unicode和非Unicode,请小心计算正确的缓冲区大小(字节数与字符数).

请注意,如果您调用Windows函数的ANSI版本(例如WriteConsoleOutputCharacterA),您仍然可以在Unicode程序中使用带有Windows的窄字符.