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

时间:2019-04-08 23:07:38

标签: 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);
}

我想确认它是否适用于std :: string以及UTF-8文件,或者是否有任何特殊设置?

1 个答案:

答案 0 :(得分:2)

可以这样读取所有UTF-8字符;毕竟这只是一个字节序列,只有在您进一步处理,转换或输出文本时,才需要确保考虑到编码。

物料清单(https://en.wikipedia.org/wiki/Byte_order_mark)是一个潜在的陷阱。如果您的文本文件具有BOM表,则可能需要手动将其从字符串中删除或进行适当处理。大概不需要将BOM与UTF-8一起使用,但是某些软件还是会这么做以区分编码类型。例如,Windows上的记事本可保存BOM表(已将记事本以UTF-8编码保存文件并在二进制编辑器中打开文件以将其检出)。