将Unicode UTF-32文件读入wstring

时间:2016-10-25 15:20:10

标签: c++ c++11 unicode

对于UTF-16,我们可以同时阅读并将其转换为wchar。例如,

std::wifstream* file = new std::wifstream(name, ifstream::binary);
locale lo = locale(file->getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian>);
file->imbue(lo);

我如何才能为UTF-32输入做同样的事情?

1 个答案:

答案 0 :(得分:1)

您可能希望使用经典的C ++模式在堆栈上分配wifstream而不是堆(new):

std::wifstream* file = new std::wifstream(name, ifstream::binary);
std::wifstream file(name, ifstream::binary);

对于codecvt部分,我会尝试使用std::codecvt_utf16<char32_t>

P.S。请注意,wchar_t可以在不同平台上具有不同的大小(16位,32位)。因此,对于UTF-16使用std::u16string而对UTF-32使用std::u32string可能更好。