今天遇到要处理UNICODE文件的情况,网上找了一圈都是读取出字节,再转的,这个不方便啊!想起了有codecvt这么个东西,顺藤摸瓜,找到了方法。
locale utf16(locale(""), new codecvt_utf16<wchar_t, 0x10ffff, little_endian>); wifstream fin("Module.rc"); wofstream fout("Module.rc.tt", ios_base::out | ios_base::binary); fin.imbue(utf16); fout.imbue(utf16); wstring line; while (getline(fin, line)) fout << line << endl;
codecvt_utf16的最后参数我使用的是little_endian,因为我的文件就是这格式的,大家根据自己的情况进行修改。如果纯粹的读取内容的话,可以使用consume_header,自动识别格式。
wofstream需要使用二进制输出,否则输出来的回事乱码。