2010-10-14 18 views
6

Próbuję wydrukować wstring/wchar_t w Xcode do konsoli, ale niestety działa tylko z podstawowych znaków (myślę ASCII) znaków, wszystko inne zostanie wyświetlona w liczbach, na przykład następujące:xcode std :: wcout z wchar_t lub std :: wstring!

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

natomiast wersja cout drukuje "äöüu" zgodnie z oczekiwaniami otrzymuję następujący przy użyciu wchar_t:

\ 344 \ 366 \ 374u

wszelkie pomysły o tym, jak to naprawić? Używam xcode 3.2.2 64 bit i gcc 4.2 z kodowaniem plików ustawionym na Unicode (UTF-8)

Dzięki!

+1

Ten * siła * należy oczekiwać zachowania, jak kodowanie Terminal jest zwykle UTF-8 i 'std :: wcout' dotyczy UTF-32. Zauważ jednak, że jeśli skompilujesz plik z 'clang ++ '(dostępny w LLVM 2.8 i jeszcze nie jest rozprowadzany z Xcode), wypisze on poprawny tekst za każdym razem. – Nate

+0

Czy dzieje się to podczas przekierowywania danych wyjściowych do pliku lub tylko na terminalu? – ybungalobill

Odpowiedz

0

Jeśli używasz wxWidgets, wxString obsługuje to za ciebie automagicznie, używając wxConvCurrent.

1

Miałem sinilar problem, ale z wostream/wofstream. Google go i był to 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 jest typedef dla wofstream lub ofstream (w zależności od UNICODE –

Powiązane problemy