0

次のコードの C++ コードで、Linux で wstring (ロシア語) を記述しようとしています。

ofstream outWFile;
outWFile.open("input.tab");
outWFile<< WStringToString(w->get_form());
outWFile<<"\t";
outWFile<<WStringToString(w->get_tag());

std::string WStringToString(const std::wstring& s)
{
    std::string temp(s.length(),' ');
    std::copy(s.begin(), s.end(), temp.begin());
    return temp;
}

input.tab の内容が無効です

私はstd::wstring を wofstream に書き込むことができないなど、stackoverflow で提案されていることを実行しようとしましたが 、助けにはなりませんでした。前もって感謝します

4

2 に答える 2

1

変換関数に問題があります。コードポイントが128/256以上のすべての文字が台無しになります(ロケールによって異なります)。

代わりに使用してくださいwcstombs(必ずUTF-8ロケールを使用してください)。

于 2012-08-14T20:36:04.380 に答える
1

wstring コンテンツを直接使用する方が良いと思います。

outWfile.write(w->get_tag()->data(), w->get_tag()->size()*sizeof(wchar_t));
// I used data() assuming the string and wstring methods are the same?
// Anyhow, get the pointer to wstring's data here.
于 2012-08-14T20:42:42.210 に答える