2010-03-22 135 views
47

實施例:如何將wchar_t值打印到控制檯?

#include <iostream> 

using namespace std; 

int main() 
{ 
    wchar_t en[] = L"Hello"; 
    wchar_t ru[] = L"Привет"; //Russian language 
    cout << ru 
     << endl 
     << en; 
    return 0; 
} 

此代碼僅打印像ADRESS HEX-值。 如何打印wchar_t字符串?

+0

的版本Ÿ首先相關的問題是http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision – 2010-03-22 16:12:29

+0

什麼操作系統,並使用什麼控制檯應用程序?有些控制檯不支持Unicode。 – 2010-03-22 16:22:45

+0

Windows 7. 編譯器MSVS2008 – zed91 2010-03-22 16:29:10

回答

53

編輯:如果您嘗試編寫無法用默認語言環境表示的文本,則不起作用。 :-(

使用std::wcout代替std::cout

wcout << ru << endl << en; 
+3

它只打印英文字符串。 俄羅斯呢? – zed91 2010-03-22 16:14:24

+8

控制檯不會啓用Unicode。輸出重定向是掛斷,它停留在8位char遺留下來。它只能在加載正確的控制檯字體的俄文機器上輸出正確的文本。 – 2010-03-22 17:19:02

+0

請注意,如果您嘗試將其打印到Linux控制檯,則很可能最終會出現亂碼,因爲大多數Linux系統不使用utf16編碼。 – 2014-02-11 17:46:53

9

我可以建議std::wcout

所以,這樣的事情:

std::cout << "ASCII and ANSI" << std::endl; 
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl; 

您可能會發現在一個相關的問題here更多信息。

+0

檢查這是否適用於俄語(複製粘貼它)。對我而言,它並不是。 – 2017-02-28 17:52:19

+0

看到這個關於混合'cout'和'wcout'弱點的帖子。 https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program – 2017-08-23 20:46:15

0

你可以用用,實際上是充滿了UTF-8字符正常的字符數組。這應該允許跨語言的混合字符。

-3

我們不是在尋找簡便的方法!

int i = 0; 
while (ru[i]) { 
    std::cout << (char)ru[i]; 
    i++; 
} 
+1

你能解釋一下嗎? – 2014-10-15 03:16:19

+2

如果這樣工作,就不會有寬字符的原因... – opetroch 2015-09-20 21:48:37

0
#include <iostream> 
using namespace std; 
void main() 
{ 
setlocale(LC_ALL, "Russian"); 
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n"; 
} 
+0

你可以通過提供一個解釋來與你的代碼,以改善這個答案。 – 2016-08-11 12:09:43

+0

歡迎來到Stack Overflow!雖然這段代碼可能有助於解決這個問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 – 2016-08-11 16:27:19