如何使用读取文件修复乱码文本?
How to fix garbled text with using ReadFile?
我正在制作一个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좌표(정수): %dn", point.y);
}
fclose(file);
}ﴀ﷽ý
我该如何解决它? 谢谢。
假设您的文件是 UTF-16 并且您正在使用_UNICODE
定义的文件进行编译(假设以正确读取文本的其余部分这一事实为合理性(,在以下行中:
editText = (TCHAR*)calloc(1, fileSize + 1);
如果你想利用calloc
所做的清零来获取以 NUL 结尾的字符串,你实际上应该做fileSize + sizeof(TCHAR)
。就像现在一样,你有一个宽字符串,其最后一个字符只有低字节到零,所以你的代码的其余部分继续读取垃圾,直到它碰巧找到两个零的实心字节(完全对齐(。
请注意,我通常对此代码非常怀疑 - 如果您使用TCHAR
则意味着您想同时使用 ANSI (TCHAR == char
( 和 Unicode (TCHAR ==wchar_t
( 进行编译,改变您解释外部文件字节的方式是一个有争议的想法。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何从C++代码中检索 QML 的文本字段中的文本?
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- Visual C++ Load rtf 文档在丰富编辑框中包含图像和文本
- 如何使用从C++生成的关键事件更改 QML 文本字段文本属性
- 文件的解密显示原始文本和密文
- C++从文本文件打印回文
- 占位符文本 文本字段中的文本在使用输入掩码时不显示
- 视觉对象C++窗体、简单消息框和将文本从文本字段分配给字符串时出错
- 用于Linux C++的开放源代码库,用于将word文档转换为纯文本
- QXmlStreamReader读取空文本,文档肯定不是空的
- 如何在纯c++中从MS word文档文件中提取纯文本
- 从文本文件中读取文本,并把它放在静态文本字段,mfc
- 如何在c++中使用cin将带有空格的文本插入到文本文档中
- 更新Qlabel文档矩形,该矩形调用的标签不是文本标签.为什么
- 如何使用ANSI转义码在C和c++中输出彩色文本
- 向xml文档添加xml文本结构
- 读取文本行,对它们进行排序并将它们写入新的文本文件
- 在c++中计算文本文件中的文本行数时出现错误
- 在c++中读取特定文本行之间的文本文件