ホームページ  >  記事  >  バックエンド開発  >  C 11 を使用して Windows で Unicode UTF-8 ファイルを Wstring に読み取る方法は?

C 11 を使用して Windows で Unicode UTF-8 ファイルを Wstring に読み取る方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 05:30:02512ブラウズ

How to Read Unicode UTF-8 Files into Wstrings in Windows with C  11?

Windows で Unicode UTF-8 ファイルを WString に読み取る

Windows プログラミングの分野では、ファイルから Unicode (UTF-8) データを取得するタスクワイド文字列 (wstring) は、C 11 標準によって提供される多用途の機能を通じて実現できます。

std::codecvt_utf8 ファセットの活用

このソリューションの核心は、std を利用することにあります。 ::codecvt_utf8 ファセット。このファセットは、UTF-8 でエンコードされたバイト文字列と、UCS2 または UCS4 表現を使用する文字列の間のブリッジとして機能します。これは、テキスト形式とバイナリ形式の両方を含む UTF-8 ファイルの読み取りと書き込みの両方の鍵を保持します。

std::locale を使用してローカライズされた環境を確立する

ファセットの力を利用するには、通常、ロケール オブジェクトはインスタンス化されます。このオブジェクトは、文化固有の情報を、特定のローカライズされた環境を共同で定義するファセットの集合としてカプセル化します。取得したら、ストリーム バッファーにこのロケールを埋め込むことができます。

Codecvt_utf8 を使用した 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 ロケールの設定

別の方法実行可能なオプションには、文字列ストリームを使用する前にグローバル 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。