C 11 で Unicode UTF-8 ファイルを wstring に読み込むにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-06 01:02:03
オリジナル
313 人が閲覧しました

How can I read Unicode UTF-8 files into wstrings in C  11?

Unicode UTF-8 ファイルを WStrings に読み取る

Windows 環境では、C 11 を使用すると Unicode (UTF-8) を読み取る機能が提供されます。ファイルを wstring に変換します。これは、std::codecvt_utf8 ファセットを利用することで可能になります。

std::codecvt_utf8 ファセット

std::codecvt_utf8 ファセットは、UTF と UTF 間の変換を容易にします。 8 エンコードされたバイト文字列および UCS2 または UCS4 文字列。この多用途性により、テキスト ファイルとバイナリ UTF-8 ファイルの両方の読み取りと書き込みが可能になります。

使用法

ファセットを使用する実装には、ファセットをカプセル化するロケール オブジェクトの作成が含まれます。およびロケール固有の情報。ストリーム バッファーにこのロケールを埋め込むことで、UTF-8 ファイルの読み取りが可能になります。

このアプローチを使用した実装例は次のとおりです。

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

int main()
{
    std::wstring wstr = readFile("a.txt");
    // Do something with your wstring
    return 0;
}
ログイン後にコピー

グローバル ロケール設定

あるいは、std::codecvt_utf8 ファセットを使用してグローバル C ロケールを設定することもできます。このメソッドにより、すべての std::locale デフォルト コンストラクターがグローバル ロケールのコピーを返すようになり、明示的なストリーム バッファーの埋め込みが不要になります。

グローバル ロケールを設定するには:

std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
ログイン後にコピー

この設定を使用すると、ファイルの読み取り操作を次のように簡素化できます:

std::wifstream wif("a.txt");
std::wstringstream wss;
wss << wif.rdbuf();
std::wstring wstr = wss.str();
ログイン後にコピー

以上がC 11 で Unicode UTF-8 ファイルを wstring に読み込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート