我在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文件,或者是否有任何特殊设置?
答案 0 :(得分:2)
可以这样读取所有UTF-8字符;毕竟这只是一个字节序列,只有在您进一步处理,转换或输出文本时,才需要确保考虑到编码。
物料清单(https://en.wikipedia.org/wiki/Byte_order_mark)是一个潜在的陷阱。如果您的文本文件具有BOM表,则可能需要手动将其从字符串中删除或进行适当处理。大概不需要将BOM与UTF-8一起使用,但是某些软件还是会这么做以区分编码类型。例如,Windows上的记事本可保存BOM表(已将记事本以UTF-8编码保存文件并在二进制编辑器中打开文件以将其检出)。