2023年5月15日

开发小记 如何解决【wfstream+wstring+中文文件】的乱码问题

作者 TheWhiteDog9487

不多说,先上一段可复现代码:

int main() {
	vector<wstring> FileContent;
	wstring FilePath = L"C:\\a.txt";
	// a.txt:中文内容,UTF-8编码
	wfstream fs(FilePath);
	wstring Line = L"";
	if (!fs.is_open()) {return 1;}
	else {
		wstring Line = L"";
		while (getline(fs, Line)) {FileContent.push_back(Line); } }
	fs.close();}

让我们编译、链接、运行,程序轻松跑起来,然后呢?

这、这不对吧?今天这又是哪个字符编码要陷害我?

怎么解决呢?

在读取文件之前加上这个:

        fs.imbue(::std::locale("zh_CN.UTF-8"));

注意,std的命名空间是有必要的,因为你有可能遇到其他库有同名函数,比如Qt。

这两种都是可以的,第一种是匿名变量,少占用个名字,其他没区别。

参考:C++读取文件中的汉字,wifstream,wstring的使用_menggesijiu的博客-CSDN博客