Windows プログラミングの分野では、ファイルから Unicode (UTF-8) データを取得するタスクワイド文字列 (wstring) は、C 11 標準によって提供される多用途の機能を通じて実現できます。
このソリューションの核心は、std を利用することにあります。 ::codecvt_utf8 ファセット。このファセットは、UTF-8 でエンコードされたバイト文字列と、UCS2 または UCS4 表現を使用する文字列の間のブリッジとして機能します。これは、テキスト形式とバイナリ形式の両方を含む UTF-8 ファイルの読み取りと書き込みの両方の鍵を保持します。
ファセットの力を利用するには、通常、ロケール オブジェクトはインスタンス化されます。このオブジェクトは、文化固有の情報を、特定のローカライズされた環境を共同で定義するファセットの集合としてカプセル化します。取得したら、ストリーム バッファーにこのロケールを埋め込むことができます。
綿密に作成された例を使用して、このアプローチの実際の応用例を示します。
<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>
この関数は、指定された UTF-8 ファイルを正常に開き、その内容を wstring に読み取り、結果の文字列を返します。
別の方法実行可能なオプションには、文字列ストリームを使用する前にグローバル C ロケールを設定することが含まれます。このコマンドにより、std::locale デフォルト コンストラクターの後続のすべての呼び出しでグローバル C ロケールのコピーが生成されるようになり、明示的なストリーム バッファー埋め込みの必要がなくなります。
<code class="cpp">std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));</code>
この変更を適用すると、wstrings はUTF-8 ファイルから簡単に読み取ることができます:
<code class="cpp">std::wstring wstr = readFile("a.txt");</code>
前述の手法は、Windows 環境で Unicode (UTF-8) ファイルを処理する堅牢かつ効率的な手段を提供し、開発者が効率的に Unicode (UTF-8) ファイルを処理できるようにします。ワイド文字列を操作および処理します。
以上がC 11 を使用して Windows で Unicode UTF-8 ファイルを Wstring に読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。