我在 ASCII 文件中使用了以下内容:
#include <fstream>
#include <streambuf>
#include <string>
#include <cerrno>
std::string get_file_contents(const char *filename)
{
std::ifstream in(filename, std::ios::in | std::ios::binary);
if (in)
{
return(std::string((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()));
}
throw(errno);
}
我想确认它是否适用于 UTF-8 文件以及 std::string 还是有任何特殊设置?
最佳答案
像这样读取所有UTF-8字符就可以了;毕竟它只是一个字节序列,只有当您进一步处理、转换或输出文本时,您才需要确保考虑到编码。
一个潜在的陷阱是 BOM ( https://en.wikipedia.org/wiki/Byte_order_mark )。如果您的文本文件有 BOM,那么您可能需要手动将其从字符串中删除或对其进行适当处理。应该不需要将 BOM 与 UTF-8 一起使用,但一些软件可能会这样做以区分编码类型。例如,Windows 上的记事本保存 BOM(让记事本以 UTF-8 编码保存文件,然后在二进制编辑器中打开文件进行检查)。
关于c++ - 将整个 UTF-8 文件读入 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582966/