Witam, mój listbox zapisuje znaki bez przekonwertowania
Przykład:
ąśćłó
Testowa wiadomość
Czy jest sposób, aby w c++ przekonwertować to na polskie znaki?
Domyślam się, że chodzi o UTF-8.
Witam, mój listbox zapisuje znaki bez przekonwertowania
Przykład:
ąśćłó
Testowa wiadomość
Czy jest sposób, aby w c++ przekonwertować to na polskie znaki?
Domyślam się, że chodzi o UTF-8.
A skąd te znaki bierze? To wygląda jak niezgodność kodowań.
Mam awarię kryształowej kuli, więc ciężko będzie ci pomóc.
@kq: Pobiera je po prostu z stringa normalnego..
Chodzi mi tutaj głównie o przekonwertowanie tego, czy istnieje taki sposób?
A mógłbyś trochę więcej informacji podać, czy mamy zgadywać?
zamiast prosić nas o filozoficzne rozważania, pokaż kod o którym piszesz.
Nawet nie wiadomo czego używasz: Qt, Win API, wxWidgets, C++CLI .net, .... .
Weź wklej kod, z którym masz problem.
Jesteś zarejestrowany 2 lata masz +30 postów i nadal nie wiesz, jak zadawać dobre pytania?
MarekR22 napisał(a):
Nawet nie wiadomo czego używasz: Qt, Win API, wxWidgets, C++CLI .net, .... .
ArAs2 napisał(a):
@kq: Pobiera je po prostu z stringa normalnego..
Jakiego "normalnego stringa" ? Każde ze srodowisk powyżej, ma swojego stringa, oby jednego, bo i po dwa-trzy "normalne" stringi
Hm.. Może rzeczywiście źle to napisałem, więc od początku:
Posiadam kod który pobiera maile:
const vector <ReadMails::Mail>& mails = rm.downloadLastMails(10);
string getContentFromMail = "";
for (const auto& m : mails) {
if (m.getContentType.find("text") != string::npos) {
getContentFromMail = m.content;
}
else {
getContentFromMail = "<Nie udało się odczytać>";
}
string time = ctime(&m.receivedTime);
string dataEmail = to_string(m.mailId) + " | \"" + m.subject + "\" (" + m.sender + ") [" + to_string(m.sizeInBytes) + "B] Content: " + getContentFromMail;
cout << dataEmail << endl;
}
Result z programu wyżej:
10 | "Test" (Test test<[email protected]>) [2863B] Content: ─ů┼Ť─ç┼é├│
9 | "Test" (Test test<[email protected]>) [2880B] Content: Testowa wiadomo┼Ť─ç
8 | "Wielkie mi─Ö┼Ťnie mimo zamkni─Ötych si┼éowni? To mo┼╝liwe! Sprawd┼║ >>" ("Musculinex - EML /o2" <[email protected]>) [45192B] Content: <Nie uda│o siŕ odczytaŠ>
7 | "Szukasz solidnego ubezpieczyciela OC/AC? Znajd┼║ go z centrum pomocy por├│wneo" ("Porowneo.pl /o2" <[email protected]>) [26637B] Content: <Nie uda│o siŕ odczytaŠ>
6 | "Zadbaj o odporno┼Ť─ç z Omega-3 ÔÇôWypr├│buj za darmo!" ("Natural Pharmaceuticals Sp. z o.o. /o2" <[email protected]>) [13960B] Content: <Nie uda│o siŕ odczytaŠ>
5 | "Szukasz solidnego ubezpieczyciela OC/AC? Znajd┼║ go z centrum pomocy por├│wneo" ("Porowneo.pl /o2" <[email protected]>) [35373B] Content: <Nie uda│o siŕ odczytaŠ>
4 | "NORMALNIE LATO 2021! Z rabatami do 800 z┼é! Sprawd┼║ >>" ("Rainbow /o2" <[email protected]>) [150081B] Content: <Nie uda│o siŕ odczytaŠ>
3 | "Test" (Test test<[email protected]>) [2745B] Content: Test
2 | "W┼é─ůcz protok├│┼é IMAP/POP/SMTP" (Poczta o2 <[email protected]>) [16066B] Content: <Nie uda│o siŕ odczytaŠ>
Jak możecie zobaczyć zwraca to w dziwnych znakach np: ─ů┼Ť─ç┼é├│
Do pobierania tej poczty używam biblioteki POCO, kod wygląda następująco:
struct Mail {
time_t receivedTime;
std::string sender, subject, content, getContentType;
int sizeInBytes;
int mailId;
};
Mail getMailInfo(POP3ClientSession& session, int messageId) {
Poco::Net::MailMessage message;
session.retrieveMessage(messageId, message);
Mail mail;
mail.receivedTime = message.getDate().epochTime();
mail.subject = message.getSubject();
mail.sender = message.getSender();
mail.content = message.getContent();
mail.getContentType = message.getContentType();
return mail;
}
vector <Mail> downloadLastMails(unsigned numberOfMails = 3) {
try {
POP3ClientSession session(this->serverAddress, this->port);
session.login(this->userName, this->password);
POP3ClientSession::MessageInfoVec messages;
session.listMessages(messages);
vector <Mail> downloadedMails;
unsigned counter = 0;
for (auto m = messages.rbegin(); m != messages.rend(); ++m)
{
if (++counter > numberOfMails)
break;
Mail&& currentMail = getMailInfo(session, m->id);
currentMail.sizeInBytes = m->size;
currentMail.mailId = m->id;
downloadedMails.emplace_back(currentMail);
}
return downloadedMails;
}
catch (const POP3ClientSession& e) {
exit(0);
}
catch (const POP3Exception& e) {
exit(1);
}
catch (const NetException& e) {
exit(2);
}
}
Używam C++ (+UI Windows Form).
Z tego do czego doszedłem jest to kodowanie windows-1250 czy jest możliwość przekonwertowania tego na utf-8? (Wiadomo mowa tutaj o te dziwne znaczki: ─ů┼Ť─ç┼é├│).
Nie ma czegoś takiego jak normalny string
. Lektura na dziś: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
Serio, siądź na 20 minut i przeczytaj ze zrozumieniem ten artykuł.
ArAs2 napisał(a):
Hm.. Może rzeczywiście źle to napisałem, więc od początku:
Do pobierania tej poczty używam biblioteki POCO, kod wygląda następująco:
Używam C++ (+UI Windows Form).
Zaraz, zaraz ... czyli używasz tego koszmaru C++/CLI, który NIE JEST językiem C++.
Na granicy światów "managed" i "unmanaged" dodajesz sobie extra problemów.
Jesli WinForms, to pisz w prawdziwym C#, oczywiście wtedy już bez POCO (ale jest ogrom prawdziwych, kompatybilnych bibliotek ze stabilnymi stringami) wiele kłopotów odpadnie.
W tej chwili to "dzielnie próbujesz rozwiązać problemy nieznane innym"