korzystam z BCB6 i piszę program odbierający maile za pomocą komponentów TIDMessage, TIDPop3, TIDSmtp. Tekst maila zapisuję w Memo i wyświetlam zawartość Memo w CppWebBrowser.
Problem jest jednak w tym że różne konta pocztowe odbierają maile zapisane w różnych kodowaniach. Niektóre maile czyta dobrze (są polskie znaki), a niektóre czyta z różnymi krzaczkami. Mam funkcję zmieniającą niektóre te krzaki na polskie znaki:
- Kod: Zaznacz cały
String __fastcall OdkodujDoUtf8(String webText)
{
String tabLitery = L"ĄąĆćĘꣳŃńŚśŻżŹźś";
String tabSymbole[] = {L"Ä„", L"±", L"Ć", L"ć", L"Ä?", L"Ä™", L"Ĺ?",
L"Ĺ‚", L"Ĺ?", L"Ĺ„", L"Ĺš", L"¶", L"Ĺ»", L"ĹĽ", L"Ĺą", L"Ĺş", L"Ĺ›"};
for(unsigned int i = 0; i < ARRAYSIZE(tabSymbole); i++)
{
webText = StringReplace(webText, tabSymbole[i], tabLitery[i + 1],
TReplaceFlags() << rfReplaceAll);
}
return webText;
}
Kiedy myślałem że już wszystko jest OK, zauważyłem że w niektórych mailach są jeszcze inne krzaki niż w poprzednich (pewnie znowu jeszcze inne kodowanie). Czy istnieje jakiś sposób żeby ten problem obejść? Np. zapisywać treść Memo do pliku tekstowego i w trakcie zapisywania ustalić że plik ma być w kodowaniu UTF8. Później wystarczyło by tylko wczytać ten plik z powrotem do Memo i wyświetlić już z polskimi znakami?