witstreamではUNICコードのテキストファイルが理解できません


今日は小さなアプリを書くときに、UTF-16のテキストファイルから1つ1つのワイド文字を読み込む必要があります.もちろんwifstreamは生まれながらにしてUnicodeを認識できると思います.コードは以下の通りです(utf 16.txtは手帳で編集してutf 16形式に保存するテキストファイルです).
001    wifstream ifs("utf16.txt");
002 for (;;) {
003 wchar_t wc = ifs.get();
004 if (WEOF==wc)
005 break;
006 else
007 cout << wc << ' ';
008 }
...

結果はがっかりしました.ifs>>wc(またはifs.get(wc))はファイルの次のバイトをwcに置くだけで、ifstreamと何の違いもありません.あ、忘れました.utf 16のテキストファイルの前にバイト順を識別するための2バイトがあります(x 86プラットフォームの下ではFFFEで、下位が前のUTF 16を表しています)、002行の前にもう1つ追加しました.
ifs.seekg(2, ios::beg);

うーん、BOM(Byte Order Marker)はスキップされましたが、get()メソッドは1バイトしか読めません(>>抽出子でも同じです).wifstreamの戦略がどのようなものなのか分からない(wistringstreamがテストすれば、行為は完全に予想に合っている)、なぜこのような奇妙なことがあるのか、時間が早くないので、明日関連するソースコードを見て、まず他の方法で一時的に対処します.
ifstream ifs("utf16.txt", ios::in | ios::binary);
if (!ifs.is_open())
throw runtime_error("open file failed");
ifs.seekg(2, ios::beg);
while (ifs.good()) {
wchar_t wc;
ifs.read((char *)&wc, sizeof(wc));
if (ifs.eof())
break;
else
cout << wc << ' ';
}