【发布时间】:2021-06-10 12:33:57
【问题描述】:
我想从 .txt 文件中读取这个西里尔文字:аааааааааааа
std::wstring str;
std::wifstream in(path);
std::getline(in, str);
in.close();
但是str 的内容是:аааааааааааа(文件编码 - UTF-8)(在调试中观察到的字符串内容,而不是在控制台中)
我尝试将文件编码更改为 UTF-16(LE 和 BE),有:ÿþ000000000000 和 þÿ000000000000
另外,我找到了this solution,但正如你所见,它没有帮助。
【问题讨论】:
-
wstring和wifstream用于wchar_t,它不需要编码,因此它不是 UTF-16 或 UTF-32。 (它可以是其中一种编码,但这不是数据类型所要求的。)由于您的文件是 UTF-8,您可能应该使用基于char的string和ifstream。 (和wchar_t一样,char类型也不需要编码。)(我没有投反对票。) -
@Eljay
string和ifstream有同样的问题。string和wstring之间的唯一区别是,如果我直接将西里尔文文本分配给程序中的变量,string同样废话,当wstring正确存储原始文本时