ホームページ  >  記事  >  バックエンド開発  >  Windows で UTF-8 ファイルを wstring に効率的に読み取るにはどうすればよいですか?

Windows で UTF-8 ファイルを wstring に効率的に読み取るにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-05 22:09:02110ブラウズ

How to efficiently read a UTF-8 file into a wstring on Windows?

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 サイトの他の関連記事を参照してください。

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