vs2019读取文件读出来的不是utf-8
时间: 2023-07-18 16:21:15 浏览: 118
如果你在 VS2019 中使用文本文件读取函数(如`fopen()`、`fread()`、`fgets()`等),默认情况下它们会将文件以 ANSI 编码方式打开,而不是 UTF-8 编码方式。
如果你需要读取 UTF-8 编码的文件,可以使用`fopen()`函数的第二个参数指定文件打开方式为二进制方式,同时在读取文件内容时,使用`fread()`函数读取指定长度的字节数据,再通过调用 Windows API 函数`MultiByteToWideChar()`将读取的字节数据转换为 Unicode 字符串。
下面是一个示例代码片段,可以读取 UTF-8 编码的文本文件并将其转换为 Unicode 字符串:
```c++
FILE* fp = fopen("filename.txt", "rb");
if(fp != NULL)
{
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* buffer = new char[file_size];
fread(buffer, 1, file_size, fp);
fclose(fp);
int wchar_count = MultiByteToWideChar(CP_UTF8, 0, buffer, file_size, NULL, 0);
wchar_t* wbuffer = new wchar_t[wchar_count];
MultiByteToWideChar(CP_UTF8, 0, buffer, file_size, wbuffer, wchar_count);
std::wstring wstr(wbuffer, wchar_count);
delete[] buffer;
delete[] wbuffer;
}
```
注意:上述代码仅供参考,具体实现应根据实际情况进行调整和优化。
阅读全文