Windows プログラミングの分野では、ファイルから Unicode (UTF-8) データを取得するタスクが行われます。ワイド文字列 (wstring) は、C 11 標準によって提供される多用途の機能を通じて実現できます。
このソリューションの核心は、std::codecvt_utf8 ファセットを利用することにあります。このファセットは、UTF-8 でエンコードされたバイト文字列と、UCS2 または UCS4 表現を使用する文字列との間のブリッジとして機能します。これは、テキスト形式とバイナリ形式の両方を含む、UTF-8 ファイルの読み取りと書き込みの両方の鍵を保持します。
ファセットの力を活用するには、通常、ロケール オブジェクトはインスタンス化されます。このオブジェクトは、文化固有の情報を、特定のローカライズされた環境を共同で定義するファセットの集合としてカプセル化します。取得したら、ストリーム バッファーにこのロケールを埋め込むことができます。
細心の注意を払って作成された例を使用して、このアプローチの実際的な応用例を示します。
#include
#include
#include
std::wstring readFile(const char* filename)
{
std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8));
std::wstringstream wss;
wss この関数は、指定された UTF-8 ファイルを正常に開き、その内容を wstring に読み取り、結果の文字列を返します。
代替アプローチ: グローバル C ロケールの設定
もう 1 つの実行可能なオプションには、文字列ストリームを使用する前にグローバル C ロケールを設定することが含まれます。このコマンドにより、std::locale デフォルト コンストラクターの後続のすべての呼び出しでグローバル C ロケールのコピーが生成されるようになり、明示的なストリーム バッファーの埋め込みの必要がなくなります。
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8));
この変更を適用すると、UTF-8 ファイルから wstring を簡単に読み取ることができます。
std::wstring wstr = readFile("a.txt");
結論
前述の手法は堅牢で効率的な手段を提供しますWindows 環境で Unicode (UTF-8) ファイルを処理できるようになり、開発者がワイド文字列を効果的に操作および処理できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3