在网上找了一个多小时,终于找到可以读取Unicode版本的代码,网上的资源真的太混乱了,还是google->stack overlow好啊:
代码如下:
#include "stdafx.h"
#include<iostream>
#include<locale>
#include <fstream>
#include<string>
#include <codecvt>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
std::locale loc("chs"); //windows下ok
std::wcout.imbue(loc);
// open as a byte stream
std::wifstream wif("C:\\Users\\admin\\Desktop\\test.ini", std::ios::binary);
std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>* codecvtToUnicode = new std::codecvt_utf16 < wchar_t, 0x10ffff, std::consume_header > ;
if (wif.is_open())
{
// apply BOM-sensitive UTF-16 facet
wif.imbue(std::locale(wif.getloc(), codecvtToUnicode));
std::wstring wline;
while (std::getline(wif, wline))
{
std::wstring convert;
for (auto c : wline)
{
if (c != L'\0' && c != L'©')
convert += c;
}
wcout << convert << endl;
}
wif.close();
//delete codecvtToUnicode; //new和delete,应该不用手动delete,在哪里delete都会崩溃(亲测)
}
return 0;
}