2016-10-25 11 views
0

UTF-16の場合、これを同時に読み取ってwcharに変換することができます。たとえば、Unicode UTF-32ファイルをwstringに読み込みます。

std::wifstream* file = new std::wifstream(name, ifstream::binary); 
locale lo = locale(file->getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian>); 
file->imbue(lo); 

UTF-32入力の場合、どうすればよいですか?

+0

、あなたは 'のstdを使用することができます:: codecvt_utf16 ' – Danh

+1

[STD :: u32string変換の可能性の重複/ std :: stringとstd :: u16string](http://stackoverflow.com/questions/31302506/stdu32string-conversion-to-from-stdstring-and-stdu16string) – Danh

+0

@ダン、おそらくかなり重複 - 私は 'std :: codecvt_utf16 'を 'imbue()'に置き換えることができますか? (私は本当に知りません;私は今までにUTF-8が必要です) –

答えて

1

あなたが代わりにヒープのスタック上wifstreamを割り当てる古典的なC++のパターン(new)を使用することもできます。codecvtの部分については

std::wifstream* file = new std::wifstream(name, ifstream::binary); 
std::wifstream file(name, ifstream::binary); 

を、私が試してみましたstd::codecvt_utf16<char32_t>となります。

P.S.wchar_tは、異なるプラットフォーム上での異なるサイズ(16ビット、32ビット)のを持つことができます。したがって、UTF-16にはstd::u16string、UTF-32にはstd::u32stringを使用する方が良いでしょう。 [STD :: codecvt_utf16](http://en.cppreference.com/w/cpp/locale/codecvt_utf16)から

+0

codecvt std :: codecvt_utf16 が機能しません。私はstd :: codecvt_utf32のようなものが必要だと思います。これは存在しません。自分で作ることはできますか?ありがとう。 – nabla

関連する問題