tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
278
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Raven280438 Raven280438 ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Beiträge
    329
    Hi,

    ich schreibe ein Programm in dem ich eine Webseite auslese. Das Programm ist auf Multi-Byte eingestellt, die Webseite ist in UTF8.

    Wenn sich im Webseiten-Quellcode Umlaute befinden werden die zerstört.

    Wie kann ich den UTF8-Quellcode in Multi-Byte umwandeln, damit die Umlaute richtig angezeigt werden (am Besten ohne eine externe Library)?


    Gruß
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von Raven280438 Beitrag anzeigen
    Wie kann ich den UTF8-Quellcode in Multi-Byte umwandeln, damit die Umlaute richtig angezeigt werden (am Besten ohne eine externe Library)?
    UTF8 ist bereits ein Multi-Byte-Zeichensatz.

    Etwas mehr Informationen wären nicht schlecht. Geht es um eine Windows-Anwendung (Vermutung: ja)? Arbeitest du mit Visual Studio (Vermutung: ja)? Wie und wo versuchst du, die UTF8-Zeichenkette auszugeben?

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Raven280438 Raven280438 ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Beiträge
    329
    Hi,

    ja, es ist eine Windows-Anwendung (mit wxWidgets).

    Ich hole mit InternetReadFile den Inhalt einer Webseite:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    std::string data;
     
    HINTERNET hOpen = InternetOpen("TestTool",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET hFile = InternetOpenUrl(hOpen,url.c_str(), NULL, NULL, INTERNET_FLAG_RELOAD, NULL);
            
    bool success = true;
    while ((success = InternetReadFile(hFile, Return, sizeof(Return), &bytesRead)) && bytesRead != 0) {
        data.append(_T(Return), bytesRead);
    }

    In data steht dann korrekt der Inhalt der Webseite drin.

    Danach lasse ich einen std::tr1::regex drüberlaufen um einen bestimmten Teil-String zu bekommen, der Umlaute enthält.
    Das Ganze geb ich dann in einer wxComboBox aus. Dabei sind die Umlaute zerstört.


    Gruß
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Eine HTML Seite aus dem Netz kann sehr unterschiedliche Kodierungen verwenden. Mit InternetReadFile liest du nur die puren Bytes.

    Du müßtest erstmal feststellen um welche Kodierung es sich handelt.

    Da bietet wxWidgets sicherlich auch Hilfsfunktionen an. Du kannst eine Seite auch z.B. mit wxURL::GetInputStream auslesen. Ist einfacher und nicht system-spezifisch.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. [MySQL] Frage zu "Set Names UTF8"
    Von HerbertJ im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 03.01.11, 16:59
  2. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  3. Antworten: 2
    Letzter Beitrag: 27.07.09, 20:22
  4. Antworten: 1
    Letzter Beitrag: 20.06.05, 16:30
  5. Antworten: 2
    Letzter Beitrag: 23.11.04, 21:43