Windows で wstring を介して Unicode データにアクセスする
Windows で Unicode テキストを処理する場合、Unicode (UTF) を効率的に読み取る方法という問題が生じます。 -8) ファイルを wstring に変換します。幸いなことに、C 11 は std::codecvt_utf8 ファセットを通じて多用途のソリューションを提供します。
codecvt_utf8 ファセットは、UTF-8 バイト文字列と UCS2 または UCS4 文字列の間のブリッジとして機能し、両方のテキストの読み取りおよび書き込み操作を可能にします。およびバイナリ UTF-8 ファイル。このファセットを活用するには、必要な UTF-8 ファセットをカプセル化するロケール オブジェクトを作成することをお勧めします。このロケール オブジェクトを使用してストリーム バッファを埋め込むことができ、効率的な UTF-8 ファイル処理が可能になります。
次のコード スニペットは、この手法を使用して UTF-8 ファイルを wstring に読み取る方法を示しています。
<code class="cpp">#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(); }</code>
この関数を使用するには、単にファイル名を引数として渡し、返された wstring を変数に代入します。
<code class="cpp">std::wstring wstr = readFile("a.txt");</code>
あるいは、グローバル C ロケールを UTF-8 に設定することもできます。文字列ストリームを操作する前に codecvt_utf8 ファセットを使用します。これにより、 std::locale のデフォルト コンストラクターを呼び出すと、目的のコーデックが組み込まれたグローバル C ロケールが返されるようになります。
<code class="cpp">std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));</code>
このグローバル設定を使用すると、ストリーム バッファーに明示的にロケールを組み込む必要がなくなります。 C コードで UTF-8 ファイルを処理するプロセスを簡素化します。
以上がWindows で UTF-8 ファイルを wstring に効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。