【发布时间】:2018-11-28 10:21:48
【问题描述】:
我正在制作一个 Win32 应用程序。 使用“ReadFile”检索以 Unicode 编写的文本文件。 在编辑框中打印。
const TCHAR FILE_DIRECTORY[] = TEXT("data/");
const TCHAR FILE_LIST[][MAX_LOADSTRING] = {
TEXT("fputs_fgets.h"), TEXT("fprintf_fscanf.h"),
TEXT("fprintfs_fscanfs.h"), TEXT("fread_fwrite.h"), TEXT("freads_fwrite.h") };
const int FILE_NAME_LENGTH = _tcslen(FILE_LIST[idx]);
const int FILE_DIRECTORY_LENGTH = _tcslen(FILE_DIRECTORY);
TCHAR* filePath = (TCHAR*)calloc(FILE_NAME_LENGTH + FILE_DIRECTORY_LENGTH + 1, sizeof(TCHAR));
_tcscpy_s(filePath, FILE_DIRECTORY_LENGTH + 1, FILE_DIRECTORY);
_tcscat_s(filePath, FILE_NAME_LENGTH + FILE_DIRECTORY_LENGTH + 1, FILE_LIST[idx]);
HANDLE file = CreateFile(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD fileSize = GetFileSize(file, NULL);
DWORD dwRead;
if (editText != NULL)
free(editText);
editText = (TCHAR*)calloc(1, fileSize + 1);
ReadFile(file, editText, fileSize, &dwRead, NULL);
CloseHandle(file);
free(filePath);
但是,输出的后面有一些奇怪的字符。
printf("y좌표(정수): %d\n", point.y);
}
fclose(file);
}ﴀ﷽ý
我该如何解决? 谢谢。
【问题讨论】:
-
"Unicode" 不是字符编码。文本文件使用什么字符编码,你的程序使用什么字符编码?请记住,
ReadFile不会零终止读取的内容。 -
输出部分怎么写?你只在这里显示了读取的部分......我怀疑错误在那里
-
@IInspectable:在 WinAPI 世界中,Unicode 应该被读取为 UTF-16。使用 TCHAR 表明该文件是 Windows Unicode(读取 UTF-16 编码)文件。 UTF-8 在 Windows 上并不常见......
-
你为什么使用 TCHAR?
-
不,这不是一个好主意。它的目的是支持不支持Unicode 的Windows 9x 和支持Unicode 的Windows NT 的单一源代码库。十多年来一直使用 TCHAR 并不明智。