2

UTF-8エンコーディングを含むstd::stringをUTF-16ファイルにストリーミングできるように、std::fstreamを吹き込むことは可能ですか?

utf8-to-utf16 ファセットを使用して次のことを試しましたが、結果ファイルはまだ UTF-8 です。

std::fstream utf16_stream("test.txt", std::ios_base::trunc | std::ios_base::out);
utf16_stream.imbue(std::locale(std::locale(), new codecvt_utf8_utf16<wchar_t, 
                               std::codecvt_mode(std::generate_header | std::little_endian)>);

std::string utf8_string = "\x54\\xE2\x83\xac\x73\x74";

utf16_stream << utf8_string;

codecvt_utf8_utf16 ファセットの参照は、UTF-16 ではなく UTF-8 ファイルの読み取りと書き込みに使用できることを示しているようです - それは正しいですか? もしそうなら、私がやりたいことを行う簡単な方法はありますか?

4

1 に答える 1

4

ファイル ストリーム ( の要件によりstd::basic_filebuf §22.4.1.4.2[locale.codecvt.virtuals]/3) は、UTF8 内部 / UTF16 外部の場合のように、N:M 文字エンコーディング変換をサポートしません。

たとえば、 wstring_convertを使用して UTF-16 文字列を作成し、それを一連のバイトとして再解釈し、通常の (非変換) を使用して出力する必要がありますstd::ofstream

または、代わりに、最初に UTF-8 をワイドに変換してから、バイトのシーケンスとして UTF-16 を生成するstd::codecvt_utf16を使用するため、ファイル ストリームで使用できます。

于 2013-07-17T14:20:56.393 に答える