2010-10-14 19 views
6

मैं कंसोल के लिए xcode में एक wstring/wchar_t मुद्रित करने के लिए कोशिश कर रहा हूँ लेकिन Unfortunatelly यह केवल बुनियादी वर्ण के साथ (मुझे लगता है कि ascii) वर्ण, सब कुछ और कुछ अंकों में हो जाता है, उदाहरण के लिए निम्नलिखित कार्य करता है:xcode std :: wcharout wchar_t या std :: wstring के साथ!

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

जबकि अदालत संस्करण प्रिंट "äöüu" के रूप में की उम्मीद मैं निम्नलिखित का उपयोग करते समय wchar_t मिलती है:

\ इसे ठीक करने के बारे में 344 \ 366 \ 374u

किसी भी विचार? मैं एक्सकोड 3.2.2 64 बिट और जीसीसी 4.2 का उपयोग कर रहा हूं जिसमें फ़ाइल एन्कोडिंग सेट यूनिकोड (यूटीएफ -8)

धन्यवाद!

+1

यह * हो सकता है * व्यवहार की उम्मीद की जा, के रूप में टर्मिनल एन्कोडिंग आमतौर पर UTF-8 और 'std :: UTF-32 के साथ wcout' सौदों है। लेकिन ध्यान दें कि यदि आप 'clang ++' (एलएलवीएम 2.8 में उपलब्ध हैं और अभी तक एक्सकोड के साथ वितरित नहीं हैं) के साथ संकलित करते हैं, तो यह दोनों बार सही पाठ आउटपुट करता है। – Nate

+0

क्या यह तब होता है जब आप आउटपुट को फ़ाइल में या केवल टर्मिनल पर रीडायरेक्ट करते हैं? – ybungalobill

उत्तर

0

यदि आप wxwidgets का उपयोग करते हैं, wxString wxConvCurrent का उपयोग करके स्वचालित रूप से आपके लिए इसे संभालता है।

1

मुझे एक sinilar समस्या थी लेकिन wostream/wofstream के साथ। यह Google पर और इस 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 या तो wofstream या ऑफस्ट्रीम के लिए एक टाइपिफ़ है (यूनिकोड के आधार पर –

संबंधित मुद्दे