问题标签 [wifstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
461 浏览

c++ - 为什么我无法读取长度超过 4094 个字符的 UTF-16 文件?

一些信息:

  • 我只在 Linux 上试过这个
  • 我已经尝试过 GCC (7.2.0) 和 Clang (3.8.1)
  • 据我了解,它需要 C++11 或更高版本

当我运行它时会发生什么

我得到重复的预期字符串“abcd”,直到它到达 4094 个字符的位置。之后它输出的就是这个符号“?” 直到文件结束。

我怎么看这件事?

我认为这不是预期的行为,它一定是某个地方的错误。

您可以使用以下代码进行测试:

0 投票
1 回答
1561 浏览

c++ - 如何在 C++ 中处理 ifstream、cout 等的多个语言环境

我正在尝试读取和处理多个不同编码的文件。我应该只为此使用 STL。假设我们有iso-8859-15UTF-8文件。

这个SO 答案中,它指出:

简而言之,对您来说更有趣的部分:

  1. std::stream( stringstream, fstream, cin, cout) 有一个内部语言环境对象,它与创建流对象时的全局 C++ 语言环境的值相匹配。正如std::in在调用 main 中的代码很久之前创建的那样,它很可能具有经典的 C 语言环境,无论您之后做什么。
  2. 您可以通过调用来确保 std::stream 对象具有所需的语言环境 std::stream::imbue(std::locale(your_favorite_locale))

问题在于,在这两种类型中,只有与首先创建的语言环境匹配的文件才能被正确处理。例如,如果locale_DE_ISO885915在前面, 则未正确附加在其中的locale_DE_UTF8文件,当我将它们取出时,我只看到文件中的几行。UTF-8string scout

正如您在代码中看到的那样,我尝试过globallocale local variables无济于事。

此外,在如何使用 std::imbue 为 std::wcout 设置语言环境?所以回答它说:

所以看起来确实有一个底层 C 库机制,应该首先使用 setlocale 启用,以允许 imbue 转换正常工作。

这种“晦涩”的机制是这里的问题吗?

处理文件时是否可以在两种语言环境之间交替?我应该灌输什么(,,cout?)以及如何灌输?ifstreamgetline

有什么建议么?

PS:为什么和locale相关的一切都这么乱?:|

0 投票
1 回答
340 浏览

c++ - 未能找到存在于 std::wstring 中的 wchar_t

当我遇到一个奇怪的行为时,我正在玩std::wstringand 。std::wfstream即,似乎std::basic_string<wchar_t>::find无法找到某些字符。考虑以下代码:

在这里,我只是读取文件的第一行input并将其写入output文件。程序运行前,第一个文件的内容aąbcćd为空,输出文件为空。执行代码后,输入文件成功复制到输出文件中。

令我惊讶的是,我试图在 中找到ć一封信buf并遇到了提到的奇怪行为。程序执行后,我确认输出文件中包含的正是aąbcćd,其中显然包含了提到的字符ć

然而,这条线的std::cout << buf.find(L'ć')表现并不像预期的那样。4考虑到 的内存布局,我没想到会得到 的输出std::wstring,但我也绝对没想到会得到std::string::npos。值得一提的是,用这种方法查找常规 ASCII 字符是成功的。

综上所述,上述代码正确地将输入文件的第一行复制到输出文件,但它未能在字符串中找到一个字符(返回 npos),该字符负责保存要复制的数据。为什么呢?是什么导致find这里失败?

注意:这两个文件在 Windows 上都是 UTF-8 编码的。

0 投票
1 回答
284 浏览

c++ - 为什么 `wifstream` 上的 `getline` 从 UTF-16 编码文件中读取乱码输入?

在尝试从这个答案中读取带有提示的 UTF-16 编码文件时,我遇到的问题是,在读取了几千个字符后,getline-method 开始在垃圾 mojibake 中读取。

这是我的主要内容:

test.txt文件包含FF,FE字节顺序标记,后跟 100 行,'a'每行 80 s。test.txt这是在 *nix上生成的 bash 脚本:

这是我编译和运行主程序的方式:

我所期望的:'a'打印了 8000秒。

实际发生了什么:

打印几千a秒后,输出变为以下垃圾:

aaaaaaaaaa愀愀愀愀愀愀愀愀愀愀

有时看起来像0A00矩形的不可打印字符。

-character的二进制代码点值为110000100000000,因此它看起来像a-byte 后跟0-byte。

似乎在读取过程中丢失了一些字节,从那时起,一切都错位了,所有剩余的符号都被错误地解码了。或者,因为输出以0A00-thingie 结尾,可能是在读取几千个as 后字节序反转,但这种行为也没有任何意义。

为什么会发生这种情况,最简单的解决方法是什么?

0 投票
2 回答
75 浏览

c++ - 如何让 C++ wfstream 使用 Unicode 文件路径?

我有一个使用 utf-8 编码的宽字符串处理文件 I/O 的应用程序。

工作代码:

但是,一旦在文件路径中引入了 unicode 字符,文件将不再正确打开。IE。以下代码不起作用并返回 false:

我在这里做错了什么?似乎应该有一种简单的方法来让 wfstream 与 unicode 文件路径一起工作,但我已经在互联网上进行了搜索,但找不到。

谢谢

0 投票
0 回答
43 浏览

c++ - 当我使用 wstring 和 wchar_t 时,模板出现问题

我编写了一个将字符串转换为向量的函数。现在我想制作一个类型的模板,因为我还想使用 wstrings 和 wchar_t。因为它们在 csv 文件中。这是我的文件...

主文件

vector_to_string.cpp

翻译.csv

问题出在 vector_to_string () 但我找不到问题,我得到这个语法错误......

问题是什么,我怎样才能最好地解决它?

0 投票
0 回答
42 浏览

c++ - 如何为 std::wifstream 编写随机访问迭代器?

我的正常程序如下:

问题是第二步需要很多时间,因为文件很大。总文件内容被加载到 wstring 上,这通常不是必需的,因为 boost::algorithm::boyer_moore 无论如何都会跳过读取大部分内容。

因此,跳过该步骤将大大提高速度,因此我需要一个在 std::wifstream 上的随机访问迭代器,例如 std::wifstream::const_iterator。

如何简洁地实现一个?