使用C ++ 11检测并读取整个UTF-8文件?

时间:2019-04-22 12:16:03

标签: c++ utf-8 fstream

我知道这种传统方式,

#include <fstream>
#include <string>
#include <cerrno>
#include <iostream>

int main()
{
    std::ifstream in("file.txt", std::ios::in | std::ios::binary);

    if (in)
    {
        std::string contents;
        in.seekg(0, std::ios::end);
        contents.resize((size_t)in.tellg()); // Allocate buffer
        in.seekg(0, std::ios::beg);

        // Read the file
        in.read(&contents[0], contents.size());

        // ... do something ..

        // Close
        in.close();
    }
    else
        throw(errno);
}

为了检测它的ANSI还是UTF-8文件,我是否需要读取前三个字节以检查BOM是否匹配,或者是否有使用codecvt的C ++ 11更好的方法?如何使这种codecvt方法适用于整个文件?

0 个答案:

没有答案