c++:如何将任意文件读入std::string
c++: How to read any file into std::string
我有一堆文本文件,想把它们读入std::string,其中一些是UCS-2, UTF-8编码。如何将它们读入std::string。我只是想读取任何文本文件到std::string。我必须转换它们吗?
如何读取它们取决于您的操作系统支持和您正在使用的区域设置。
如果您只是naïvely读取文件而不触及您的区域设置,并且它们的区域设置与您的std c++库使用的区域设置不匹配,那么您可能会遇到困难。对于单字节字符集和多字节字符集也有类似的问题。
在读取文件之前,没有可靠的方法可以告诉文件的区域设置是什么(元数据可能是错误的),所以一般的策略是先尝试以最常见的格式读取,然后如果失败(即遇到无效字符),再尝试使用不同的格式。即便如此,它也可能是模棱两可的。这是一个看似复杂的问题,您在用疯狂的字符集解析HTML时会遇到同样的问题。
通常,有两组可用的文件I/O函数,一组用于多字节字符集,另一组用于单字节字符集。不过,对该功能的支持是非常特定于平台的,所以如果您使用的是没有添加特殊字符支持的英文本地化操作系统,那么在不使用外部库的情况下,c++可能无法直接支持多字节集。
Microsoft为cin和cout指定了非标准扩展。通过以w作为前缀,它们按字节宽度分隔流。
wcout << "儫";
这可以像您期望的那样工作,但是您必须使用#define _UNICODE
才能编译它。顺便说一句,Windows将许多系统API调用分为两个版本,一个接受单字节字符串,另一个接受多字节字符串。即CreateProcessA
vs CreateProcessW
。
ios_base
、imbue
和getloc
中的locale功能。对于广泛部署的c++版本,目前还没有一个好的方法来处理这些问题,尽管我知道这些问题在即将发布的c++版本中已经得到了缓解。
相关文章:
- 'string'文件在带有C++文件的iOS插件上找不到
- C++将文件行分离为String和Int
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 无法将文件的内容读入 std::string
- 如何使用 rapidjson 读取 json 文件并输出到 std::string?
- Qt UTF-8 文件到 std::string 添加额外的字符
- 将C 数组写成文件,避免创建std :: String
- 我是否也应该包括 string.h,即使它存在于头文件中
- 如何使用矢量数据使用 rapidjson 库创建 json 文件<string>?
- 使用 std::find 查找从二进制文件中读取的字符并转换为 std::vector 中的 std::string<string> 会产生这种不可预测的行为?
- YAML::LoadFile(std::string const&) 找不到文件 [ROS 中的 yaml-cpp]
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 将文件的二进制内容推送到 std::string 以用于 Google 的 Snappy
- 如何在C 中的文件中直接读取std :: String中的字符串
- 比较输入的C弦与文件读取c-string
- 使用 string::find 来解析文件
- C++ 将矢量的排序内容写入<string>文件
- 错误:无法在简单的 std::string 文件中转换
- 头文件是如何实现的,比如说string.h文件