我正在尝试将保存在 dics 上的文件内容加载到字符串中。该文件是 .CS 代码,是在 VisualStudio 中创建的,所以我想它是以 UTF-8 编码保存的。我这样做:
FILE *fConnect = _wfopen(connectFilePath, _T("r,ccs=UTF-8"));
if (!fConnect)
return;
fseek(fConnect, 0, SEEK_END);
lSize = ftell(fConnect);
rewind(fConnect);
LPTSTR lpContent = (LPTSTR)malloc(sizeof(TCHAR) * lSize + 1);
fread(lpContent, sizeof(TCHAR), lSize, fConnect);
但是结果很奇怪-第一部分(字符串的一半是.CS文件的内容),然后出现了奇怪的符号,如췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍。 所以我认为我以错误的方式阅读了内容。但是如何正确地做到这一点? 非常感谢,我期待听到!
最佳答案
ftell()、fseek() 和 fread() 都对字节进行操作,而不是对字符进行操作。在 Unicode 环境中,TCHAR 至少为 2 个字节,因此您分配和读取的内存是应有的两倍。
我从未见过 fopen() 或 _wfopen() 支持“ccs”属性。您应该使用“rb”作为读取模式,将原始字节读入内存,然后在它们全部可用后对其进行解码,即:
FILE *fConnect = _wfopen(connectFilePath, _T("rb"));
if (!fConnect)
return;
fseek(fConnect, 0, SEEK_END);
lSize = ftell(fConnect);
rewind(fConnect);
LPBYTE lpContent = (LPBYTE) malloc(lSize);
fread(lpContent, 1, lSize, fConnect);
fclose(lpContent);
.. decode lpContent as needed ...
free(lpContent);
关于c++ - C++ 上的 UNICODE (fread) 读取文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2852772/