2010-03-22 29 views
47

Örnek:wchar_t değerlerini konsola nasıl yazdırabilirim?

#include <iostream> 

using namespace std; 

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

Bu kod tek adres gibi HEX-değerleri basar. wchar_t dizesi nasıl yazdırılır?

+0

ver y first İlgili soru http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision –

+0

Hangi işletim sisteminde ve hangi konsol uygulamasını kullanıyorsunuz? Bazı konsollar Unicode'u desteklemez. –

+0

Windows 7. Derleyici MSVS2008 – zed91

cevap

53

Düzenleme: Varsayılan yerel ayarınızda gösterilemeyen bir metin yazmaya çalışıyorsanız bu işe yaramaz. :-(

Kullanım yerine std::cout ait std::wcout.

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

Sadece ingilizce dizgisi yazdırır. Rusçadan ne haber? – zed91

+8

Konsol, Unicode etkin olmayacak. Çıktı yönlendirmesi, 8-bit karakterli mirasa sıkışmış olan bir kapanış. Sadece bir Rus makinesinde doğru metin yazı tipi doğru konsol yazı yüklü çıktı verebilir. –

+0

Bir Linux konsoluna yazdırmak için bunu denerseniz, çoğu Linux sisteminin utf16 kodlamasını kullanmadığı için bozuk karakterlerle sonuçlanacağını unutmayın. –

9

std::wcout önerebilir miyim?

Yani, böyle bir şey:

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

İlgili bir soru here daha fazla bilgi bulabilirsiniz.

+0

Bunun Rusça dili ile çalışıp çalışmadığını kontrol edin (kopyalayın). Benim için öyle değil. –

+0

'Cout' ve 'wcout' foble'larının karıştırılması ile ilgili bu konuya bakın. https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program –

0

Sen. Bu diller arasında karakterleri karıştırma izin vermelidir kullanacağım aslında utf-8 karakter ile doludur normal bir kömürleşme dizisi kullanabilirsiniz.

-3

biz kolay yollar arıyor değil!

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

Bundan daha fazlasını açıklayabilir misiniz? –

+2

Eğer bu işe yarayacak olsaydı, geniş karakterler için bir sebep olmazdı ... – opetroch

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

Bu cevabı kodunuzla ilgili bir açıklama yaparak geliştirebilirsiniz. –

+0

Yığın Taşmasına Hoş Geldiniz! Bu kod problemi çözmeye yardımcı olsa da, _why_ ve/veya _how_ 'un bu soruya cevap vermediğini açıklamıyor. Bu ek bağlamı sağlamak uzun vadeli değerini önemli ölçüde artıracaktır. Lütfen, hangi sınırlamaların ve varsayımların geçerli olduğu dahil, açıklama eklemek için cevabınızı [düzenleyin]. –

İlgili konular