私はUCS-4打ち鳴らす:wstringのへのconst char16_tの*(UTF-16)に変換する(UCS-4)
にUTF-16でエンコードされた文字列を変換しようとしている私が正しく理解していれば、C++ 11が提供しますcodecvt_utf16を介してこの変換。
#include <iostream>
#include <locale>
#include <memory>
#include <codecvt>
#include <string>
using namespace std;
int main()
{
u16string s;
s.push_back('h');
s.push_back('e');
s.push_back('l');
s.push_back('l');
s.push_back('o');
wstring_convert<codecvt_utf16<wchar_t>, wchar_t> conv;
wstring ws = conv.from_bytes(reinterpret_cast<const char*> (s.c_str()));
wcout << ws << endl;
return 0;
}
注:明示的なpush_backsが打ち鳴らす(Xcodeの4.2)の私のバージョンは、Unicode文字列リテラルを持っていないという事実を回避する
私のコードは次のようなものです。
コードを実行すると、終了例外が発生します。私はここで違法な行為をしていますか? wstring_convertに渡されたconst char *はUTF-16でエンコードされているため、動作するはずです。私はエンディアンが問題であるとも考えましたが、私はそうではないことを確認しました。
原則として、いくつかの便利な機能がどこか ''にあるべきですが、私は[問題があった](http://stackoverflow.com/questions/7562609/what-does-cuchar-provide-and-where - それは文書化されている)それらの仕事の仕方を見つけ出す。 –
@Kerrek SB ''はロケールに依存しますが、質問はUnicodeからUnicodeへの変換であり、関連するロケールはありません。 –
Cubbi
@Cubbi:Hm、かなり確かに ''はロケールとは関係ありませんが、私は間違っているかもしれません... –