2012-01-09 8 views
37

मैं कोड था:std :: wstring को प्रारंभ और मुद्रित करने के लिए कैसे करें?

std::string st = "SomeText"; 
... 
std::cout << st; 

और वह ठीक से काम किया। लेकिन अब मेरी टीम wstring पर जाना चाहता है। तो मैं करने की कोशिश की:

std::wstring st = "SomeText"; 
... 
std::cout << st; 

लेकिन यह मुझे एक संकलन त्रुटि दिया:

Error 1 error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'const char [8]' to 'const std::basic_string<_Elem,_Traits,_Ax> &' D:...\TestModule1.cpp 28 1 TestModule1

वेब मैंने पढ़ा है कि मैं के रूप में यह परिभाषित करना चाहिए खोज के बाद:

std::wstring st = L"SomeText"; // Notice the "L" 
... 
std::cout << st; 

इस संकलित लेकिन "SomeText" के बजाय "0000000000" प्रिंट करता है।

मैं क्या गलत कर रहा हूं?

+0

आईसीयू यूनिकोड पुस्तकालय उपयोग करने पर विचार - [कड़ी] (http://icu-project.org/apiref/icu4c/index.html)। यह यूनिकोड का समर्थन करता है और इसमें कई उपयोगी विशेषताएं हैं। खासकर यदि आप उन तारों में हेरफेर करना चाहते हैं। – WeaselFox

+0

@ वेसेल: यूनिकोड तारों के साथ काम करने के लिए आपको दुनिया में एक अलग पुस्तकालय की आवश्यकता क्यों होगी? –

+0

मेरे अनुभव से wchar तारों (खोज, प्रतिस्थापित आदि) या अन्य बहु-बाइट तारों में हेरफेर करने के लिए एक अलग पुस्तकालय का उपयोग करना बेहतर है। – WeaselFox

उत्तर

65

एक wstring प्रदर्शित करने के लिए आपको cout - wcout का विस्तृत संस्करण भी चाहिए।

std::wstring st = L"SomeText"; 
... 
std::wcout << st; 
9

उपयोग std::wcout बजाय std::cout

5

उपयोग std::wcout<<st का उपयोग करने का प्रयास करें, यह आपकी समस्या का समाधान करेगा।

std::wstring st = "SomeText"; 
... 
std::wcout << st; 
2

यह उत्तर "सी ++/सीएलआई" टैग, और संबंधित विंडोज सी ++ कंसोल पर लागू होता है।

आप std :: wstring में बहु बाइट वर्ण मिला है, दो और बातें करने के लिए किया जा करने की जरूरत है यह काम:

  1. हैडर शामिल करें
    #include <io.h>
    #include <fcntl.h>
  2. सेट stdout मोड
    _setmode(_fileno(stdout), _O_U16TEXT)

परिणाम: Multi-bytes console

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