2010-10-14 3 views
6

Je suis en train d'imprimer un wstring/wchar_t dans Xcode à la console mais unfortunatelly il fonctionne uniquement avec les caractères de base (je pense ascii) caractères, tout est autre affiché en nombre, par exemple les éléments suivants:xcode std :: wcout avec wchar_t ou std :: wstring!

std::cout << "äöüu"<< std::endl; 
std::wcout << L"äöüu" << std::endl; 

tandis que les imprime version cout "äöüu" comme prévu, j'obtiens ce qui suit lors de l'utilisation wchar_t:

\ 344 \ 366 \ 374u

des idées sur la façon de résoudre ce problème? J'utilise xcode 3.2.2 64 bit et gcc 4.2 avec un encodage de fichier défini sur Unicode (UTF-8)

Merci!

+1

Ce * pourrait * être le comportement attendu, comme le codage du terminal est généralement UTF-8 et 'std :: traite wcout' avec UTF-32. Mais notez que si vous compilez avec 'clang ++' (disponible dans LLVM 2.8 et pas encore distribué avec Xcode), il sort le texte correct deux fois. – Nate

+0

Cela se produit-il lorsque vous redirigez la sortie vers un fichier ou uniquement sur le terminal? – ybungalobill

Répondre

0

Si vous utilisez wxWidgets, wxString le gère automatiquement pour vous, en utilisant wxConvCurrent.

1

J'ai eu un problème sinilar mais avec wostream/wofstream. Googlé et ce fut le Anser:

tc_ofstream ofs; 

if (sizeof(TCHAR) == sizeof(wchar_t)) 
{ 
    //codecvt_utf16<TCHAR> utf16; cannot make use of non-dynamic value 
    locale loc (locale::classic() ,new codecvt_utf16<TCHAR>); 
    ofs.imbue(loc); 
    ofs.open(_T(".\\test.txt") ,tc_ios::binary); 

    TCHAR BOM = 0xFEFF; ofs << BOM; 
    ofs << _T("UNICODE") << endl; 
} 
else 
{ 
    ofs.open(_T(".\\test.txt") ,tc_ios::binary); 
    ofs << _T("NON-UNICODE") << endl; 
} 
+0

tc_ofstream est un typedef pour wofstream ou ofstream (selon UNICODE –