SORU
22 Mart 2010, PAZARTESİ


Çıkış Windows konsol uygulaması dizeleri unicode

Merhaba unicode dize ile konsol için bir çıkış yapmaya çalışıyordumiostreamsve başarısız oldu.

Bunu buldum: Using unicode font in c console app bu kod parçası çalışır.

SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞǽлљΣæča";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize]; 
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);

Ancak, unicode doğru iostreams ile çıkış yolu bulamadık. Herhangi bir öneriniz var mı?

Bu çalışmıyor:

SetConsoleOutputCP(CP_UTF8);
utf8_locale = locale(old_locale,new boost::program_options::detail::utf8_codecvt_facet());
wcout.imbue(utf8_locale);
wcout << L"¡Hola!" << endl;

EDİT Bu parçacık etrafında bir akış içinde sarmak için daha başka bir çözüm bulamadım. Umarım, birileri daha iyi fikirleri vardır.

//Unicode output for a Windows console 
ostream &operator-(ostream &stream, const wchar_t *s) 
{ 
    int bufSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
    char *buf = new char[bufSize];
    WideCharToMultiByte(CP_UTF8, 0, s, -1, buf, bufSize, NULL, NULL);
    wprintf(L"%S", buf);
    delete[] buf; 
    return stream; 
} 

ostream &operator-(ostream &stream, const wstring &s) 
{ 
    stream - s.c_str();
    return stream; 
} 

CEVAP
29 Ocak 2012, Pazar


Bir çözüm burada Visual Studio 2010 ile teyit ettim. MSDN article MSDN blog post). Numara 7* *bilinmeyen bir çağrıdır.

Çözüm:

#include <iostream>
#include <io.h>
#include <fcntl.h>

int wmain(int argc, wchar_t* argv[])
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L"Testing unicode -- English -- Ελληνικά -- Español." << std::endl;
}

Ekran görüntüsü:

Unicode in console

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GirlSanctuaryBlog

    GirlSanctuar

    28 Aralık 2011
  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011