Unicode UTF-8 ファイルを WStrings に読み取る
Windows 環境では、C 11 を使用すると Unicode (UTF-8) を読み取る機能が提供されます。ファイルを wstring に変換します。これは、std::codecvt_utf8 ファセットを利用することで可能になります。
std::codecvt_utf8 ファセット
std::codecvt_utf8 ファセットは、UTF と UTF 間の変換を容易にします。 8 エンコードされたバイト文字列および UCS2 または UCS4 文字列。この多用途性により、テキスト ファイルとバイナリ UTF-8 ファイルの両方の読み取りと書き込みが可能になります。
使用法
ファセットを使用する実装には、ファセットをカプセル化するロケール オブジェクトの作成が含まれます。およびロケール固有の情報。ストリーム バッファーにこのロケールを埋め込むことで、UTF-8 ファイルの読み取りが可能になります。
このアプローチを使用した実装例は次のとおりです。
#include <sstream> #include <fstream> #include <codecvt> std::wstring readFile(const char* filename) { std::wifstream wif(filename); wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); std::wstringstream wss; wss << wif.rdbuf(); return wss.str(); } int main() { std::wstring wstr = readFile("a.txt"); // Do something with your wstring return 0; }
グローバル ロケール設定
あるいは、std::codecvt_utf8 ファセットを使用してグローバル C ロケールを設定することもできます。このメソッドにより、すべての std::locale デフォルト コンストラクターがグローバル ロケールのコピーを返すようになり、明示的なストリーム バッファーの埋め込みが不要になります。
グローバル ロケールを設定するには:
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
この設定を使用すると、ファイルの読み取り操作を次のように簡素化できます:
std::wifstream wif("a.txt"); std::wstringstream wss; wss << wif.rdbuf(); std::wstring wstr = wss.str();
以上がC 11 で Unicode UTF-8 ファイルを wstring に読み込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。