c++ - 将整个 UTF-8 文件读入 std::string

标签 c++ unicode fstream

我在 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/

相关文章:

python - 在 Python 中使用 BOM 字符读取 Unicode 文件数据

c++ - 无法从具有字符串成员的结构 vector 中读取名称

c++ - 在 QQuickPaintedItem 上用鼠标绘制

python - 在Python中去除\n、\、\t、\xa0、â\x80\x93字 rune 本的最快方法

c++ - 在循环中使用 cin.get() 输入字符串

python - 如何在 Django 中用阿拉伯字符创建 slug?

c++ - 使用相同的流对象写入文件流或字符串流

C++从文件中读取数据到char *

c++ - 使用 OpenGL 将实心圆绘制为一个顶点数组?

c++ - cl.h 是否适用于 C++?