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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 07:26:02985ブラウズ

How to Read Unicode (UTF-8) Files into wstrings on Windows with C  11?

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

Windows で Unicode (UTF-8) ファイルを Wstring に読み取ると、

std::codecvt_utf8 を使用すると、UTF-8 バイト文字列と UCS2 または UCS4 文字列間の変換が簡素化されます。このファセットにより、UTF-8 ファイル (テキストとバイナリの両方) の読み取りと書き込みが可能になります。

ファセットを利用するには、目的のローカライズされた環境を定義するファセットをカプセル化するロケール オブジェクトを作成します。ロケール オブジェクトが作成されたら、それをストリーム バッファーに埋め込みます。

imbuing を使用した実装は次のとおりです。

#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();
}

ストリーム バッファーを埋め込んだ後、ファイルを wstring に読み取るのは簡単です。

std::wstring wstr = readFile("a.txt");

または、文字列ストリームを操作する前にグローバル C ロケールを設定すると、明示的な埋め込みの必要がなくなります。

std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

これにより、グローバル ロケールがデフォルトとして設定され、自動的に将来のストリーム バッファーに適用されます。

以上がC 11 を使用して Windows 上で Unicode (UTF-8) ファイルを wstring に読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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