对于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输入做同样的事情?
答案 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
可能更好。