Unicode 字符未从文件正确加载
Unicode characters aren't loading properly from file
我有一个文本文件,其中包含一些字符,包括一些Unicode字符。我尝试使用以下编码保存此文件,但没有解决问题:UTF8,不带BOM的UTF8,UCS2 BE和UCS2 LE。下面是尝试逐行读取文件的代码。
std::wifstream infile("my_file.txt");
wchar_t line[1024];
while (infile.getline(line, sizeof(line))) { ... }
"line"具有垃圾值代替Unicode,并且在有ASCII字符的情况下具有normal。它的值如下所示:L"此处的普通文本"而不是 L"此处的正常文本"
我尝试了其他变体,例如:
std::wifstream infile("my_file.txt");
std::wstring line;
while (std::getline(infile, line)){ ... }
我也尝试过设置区域设置。我在一台Windows计算机上。如何让 unicode 按预期工作?我更喜欢一种适用于所有平台的格式,但在这个阶段我会接受任何东西。
谢谢。
似乎您需要在输入流中加入区域设置:请参阅 https://stackoverflow.com/a/1275260/1967396
typedef wchar_t ucs4_t;
std::locale old_locale;
std::locale utf8_locale(old_locale,new utf8_codecvt_facet<ucs4_t>);
...
std::wifstream input_file("data.utf8");
input_file.imbue(utf8_locale);
ucs4_t item = 0;
while (ifs >> item) { ... }
示例数据不包含预期的 Unicode 字符€
。
提供的示例数据"此处的正常文本"是 3 字节字节顺序标记 (BOM),指示此和以下是 UTF-8 编码文本"此处的普通文本"。 因此,打开文件的各种方法不会得到"此处的正常文本"。
OP 需要创建包含所需"此处的正常文本"的文件。
Windows 为fopen()
中的模式提供了非标准选项,例如 fopen("file.txt", "rccs=UNICODE")
.
参见 http://msdn.microsoft.com/en-us/library/yeby3zcb(v=vs.90).aspx
一旦文件确实有"€",甚至可能fopen("file.txt", "r")
就可以工作。
相关文章:
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- SDL_LoadWAV未加载文件
- 如果流无法加载文件,并且无法打开
- 无法使用 fopen() 加载文件
- 如何在mac上为c++加载文件
- 如何以编程方式知道Adobe Reader完成了加载文件
- 使用loadFromFile()函数加载文件
- 使用微小的xml保存和加载文件
- C++加载文件
- C++从SQL数据库加载文件
- 从"Resource Files"文件夹加载文件C++ Windows 应用程序 (win32)
- 构建时如何在Visual Studio c++中加载文件
- 用dlsym加载文件,无法加载库
- 当在c#中加载c++ dll时,CLR是否会自动加载c++文件的依赖项?
- OpenCV视频捕获不加载文件
- 用char指针加载文件
- TinyXml解析器拒绝正确加载文件
- CMake 错误在 CMakeLists.txt:56 (include): 包含找不到加载文件: gmxVersion