私はC++11の新しいUnicode機能を調査してきましたが、他のC ++ 11エンコーディングの質問は非常に役立ちましたが、 cppreferenceの次のコードスニペットについて質問があります 。コードは、UTF-8エンコーディングで保存されたテキストファイルを書き込み、すぐに読み取ります。
// Write
std::ofstream("text.txt") << u8"z\u6c34\U0001d10b";
// Read
std::wifstream file1("text.txt");
file1.imbue(std::locale("en_US.UTF8"));
std::cout << "Normal read from file (using default UTF-8/UTF-32 codecvt)\n";
for(wchar_t c; file1 >> c; ) // ?
std::cout << std::hex << std::showbase << c << '\n';
私の質問は非常に単純ですが、なぜループにwchar_t
必要なのですか?for
文字u8
列リテラルは単純なものを使用して宣言できchar *
、UTF-8エンコーディングのビットレイアウトはシステムに文字の幅を通知する必要があります。UTF-8からUTF-32への自動変換があるようです(したがってwchar_t
)が、その場合、なぜ変換が必要なのですか?