🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309866

std::wstring i Konsole z Kde

#309866
From: Szyk Cech
Date: Sun, 02 Jun 2019 05:23
70 lines
2987 bytes
Witam
Chcę zrobić funkcje konwersji między std::string a std::wstring. W 
zasadzie już je chyba mam. Problem jest taki, że nie wiem jak 
stwierdzić, że std::wstring jest poprawny. Bo na konsolę wypisuje 
śmieci. Program jest taki:

#include <string>
#include <iostream>
#include <codecvt>
#include <locale>

std::wstring gToWide(const std::string& aNarrow)
{
     std::wstring_convert<std::codecvt_utf8<wchar_t>> lConverter;
     return lConverter.from_bytes(aNarrow);
}

std::string gToNarrow(const std::wstring aWide)
{
     std::wstring_convert<std::codecvt_utf8<wchar_t>> lConverter;
     return lConverter.to_bytes(aWide);
}

int main(/*int argc, char *argv[]*/)
{
     std::string lStr1("zażółć gęślą jaźń");
     std::wstring lStr2(gToWide(lStr1));

//    std::cout << "sizeof(wchar_t): " << sizeof(wchar_t) << std::endl;
//    std::cout << lStr1 << std::endl;
     std::wcout << lStr2 << std::endl;
//    std::cout << gToNarrow(lStr2) << std::endl;
     return EXIT_SUCCESS;
}

Wyjście jest takie:
$ ./StringConversions
za???? g??l? ja??


A gdy main jest taka:

int main(/*int argc, char *argv[]*/)
{
     std::string lStr1("zażółć gęślą jaźń");
     std::wstring lStr2(gToWide(lStr1));

     std::cout << "sizeof(wchar_t): " << sizeof(wchar_t) << std::endl;
     std::cout << lStr1 << std::endl;
     std::wcout << lStr2 << std::endl;
     std::cout << gToNarrow(lStr2) << std::endl;
     return EXIT_SUCCESS;
}

To wyjście jest takie:

$ ./StringConversions
sizeof(wchar_t): 4
zażółć gęślą jaźń
za|�B g[l jazD
zażółć gęślą jaźń

Wiem, że ta druga postać main jest raczej nie prawidłowa, bo kiedyś 
zgłaszałem ten problem do GNU i podali mi tam, że nie należy mieszać 
std::cout i std::wcout.

Ma ktoś pomysł co zrobić, by std::wcout wypisywał coś normalnego?!?

dzięki i pozdro
Szyk Cech
Technical Details
Message-ID: <N3JIE.260549$972.210681@fx14.fr7>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!border1.nntp.ams1.giganews.com!nntp.giganews.com!npeer.de.kpn-eurorings.net!npeer-ng0.de.kpn-eurorings.net!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx14.fr7.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!border1.nntp.ams1.giganews.com!nntp.giganews.com!npeer.de.kpn-eurorings.net!npeer-ng0.de.kpn-eurorings.net!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx14.fr7.POSTED!not-for-mail
Newsgroups: pl.comp.lang.c
X-Mozilla-News-Host: snews://newshosting.com:563
From: Szyk Cech <szykcech@spoko.pl>
Subject: std::wstring i Konsole z Kde
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0
MIME-Version: 1.0
Lines: 70
Message-ID: <N3JIE.260549$972.210681@fx14.fr7>
X-Complaints-To: abuse(at)newshosting.com
NNTP-Posting-Date: Sun, 02 Jun 2019 05:23:57 UTC
Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com
Date: Sun, 2 Jun 2019 07:23:56 +0200
X-Received-Bytes: 2766
X-Received-Body-CRC: 3723335001
X-Original-Bytes: 2590
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit