2

Xcode プロジェクトではstd::cout、コンソールへの書き込みに使用すると、出力は問題ありません。

ただし、使用するstd::wcoutと出力が得られません。

私はこれが C++ の厄介な問題であることを知っており、Xcode のケースで特定の解決策を見つけようとグーグルで検索してきました。提案されたことが機能することがわかったいくつかのことは次のとおりです。

std::cout.imbue( std::locale("") );

std::setlocale(LC_ALL, "");

これらのどちらも違いはありません。ファセット API を勉強してコンソールに書き込めるようになるまであと 2 週間を費やすことを諦める前に、ここで尊敬する聴衆に確認してみようと思いました。

[アップデート]

私が抱えていた問題の理由は、実際には、印刷しようとしている文字列の特定のエンコーディングに関係していると思います。

文字列リテラルのみを送信すると、 を使用しL"my string" syntaxて機能します! これは UTF32 (リトル エンディアン エンコーディング) を使用しているようです。

ただし、これを NSUTF32BigEndianStringEncoding エンコーディングを使用して Objective C++ コードから渡された文字列と混ぜています。問題を引き起こしているのは、このエンコーディングの組み合わせです。

この件は終了したと考えてよいと思います。読んでくれてありがとう。

4

1 に答える 1

4

std::wcout は std::cout と同じように動作するはずです。

私のMACでは次のように動作します:

#include <iostream>

int main()
{
    std::cout << "HI" << std::endl;
    std::wcout << L"PLOP" << std::endl;
}

たぶん(いくつかのコードは良かったでしょうが)バッファをフラッシュしていないためです。std::cout と std::wcout はバッファリングされることに注意してください。これは、バッファーがいっぱいになるか、明示的にバッファーをフラッシュするまで、出力がコンソールにプッシュされないことを意味します。

次の方法でバッファをフラッシュできます。

std::wcout << flush();
// or
std::wcout << endl;  // Those also puts a '\n' on the stream.
于 2008-11-09T16:15:42.297 に答える