C++在Windows平台读取TXT文件UTF-8立陶宛语字符并在控制台正确显示问题
问题根因说明
L前缀是仅作用于编译期的宽字符串字面量标识,只对代码中硬编码的字符串生效,运行时从文件读取内容不需要也无法使用该前缀,你的乱码问题根源是宽字符文件流的编码和文本文件的实际存储编码不匹配。
解决方案
- 首先确认
Info.txt的存储编码:用记事本打开文件,点击「文件」-「另存为」,查看窗口底部的编码选项,记住当前选中的编码类型。 - 根据文件编码修改代码,引入
<locale>头文件,给wifstream指定匹配的编码转换规则。
以下是适配最常见的UTF-8编码文本文件的完整可运行代码:
#include <iostream> #include <fstream> #include <io.h> #include <fcntl.h> #include <string> #include <locale> using namespace std; int main() { _setmode(_fileno(stdout), _O_U16TEXT); wstring text; wifstream fin("Info.txt"); // 匹配UTF-8编码的文本文件 fin.imbue(locale(fin.getloc(), new codecvt_utf8_utf16<wchar_t>)); getline(fin, text); wcout << text; fin.close(); return 0; }
如果你的Info.txt是Windows下默认的「Unicode」编码(即UTF-16 LE编码),将上述代码中imbue行替换为以下内容即可:
fin.imbue(locale(fin.getloc(), new codecvt_utf16<wchar_t, 0x10ffff, consume_header>));
内容的提问来源于stack exchange,提问作者Liutauras
相关产品推荐
相关产品推荐

