Sonderzeichen in String



  • Hallo,

    ich hab ein kleines Sonderzeichenproblem.

    Und zwar lese ich eine Website mit den Indykomponenten in einen String.

    Jedoch verwandeln sich dann Sonderzeichen wie äöüÄÖÜ in zeugs wie stört = stört
    „ = " ä=ä

    gibt es eine möglichkeit, das zu verhindern?

    Da ich das ganze in einem RichEdit anzeigen möchte, stört es doch enorm.

    Ich hab auch schon probiert, den "mist" herauszulöschen und durch die richtigen buchstaben zu ersetzen, hat aber leider nicht funktioniert.

    mfg
    Raimond



  • Kann ich so nicht nachvollziehen. Ist das bei jeder Webseite so oder hast du eine XHMTL Seite?



  • <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
    <META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=UTF-8'>
    

    Es sind mehrere seiten. Bei manchen wurden die sonderzeichen in den entsprechenden html code umgesetzt= keine probleme

    bei manchen jedoch stehen sie normal "äüö" im quelltext, da hab ich mein problem.

    ich bin der meinung, dass ich von utf nach iso wandeln muss... nur wie?



  • Hallo

    stört = stört

    Das ist klar, die Sonderzeichen sind hier utf8 kodiert, was ja auch im Header des Files angegeben ist

    charset=UTF-8'

    Das Problem ist das die Borland-Controls nichts mit UTF8 oder Unicode am Hut haben. Du kannst zum Beispiel externe Controls wie die von LMD oder mein Favorit TNT nehmen, die können solche Zeichen darstellen.

    bis bald
    akari



  • Danke für die Komonenten, damit wäre ien problem vermutlich schon gelöst. Allerdings sollte der Eingelesene String (nachdem der html code rausgefiltert wurde--funktioniert bereits) gespeichert werden. Speichere ich das als .txt habe ich kein Problem mit den utf8 sonderzeichen, der texteditor schafft das. allerdings benötige ich ein .rtf dokument. Dieses komt allerdings mit utf8 zeichen nicht klar.

    Laut diversen Seiten kann man das offenbar mit multyByteToWidechar lösen... nurhabe ich das nicht hinbekommen.

    mfg
    Rai



  • Hallo

    Eine Funktion namens multyByteToWidechar ist in meinem Builder 5 nicht enthalten.

    Ich benutzt zum Speichern von speichern von UTF8 in RTFs erstmal diese Funktion

    WideString ToUC(const char* utf8)
    {
      int len = strlen(utf8);
      int i = 0;
      WideString unicode;
      char ch;
      wchar_t wch;
      while( i < len )
      {
        ch = utf8[i];
        if( (ch & 0x80) == 0x00 )
        {
          wch = ch;
          ++i;
        }
        else if( (ch & 0xE0) == 0xC0 )
        {
          wch = ((ch & 0x1F) << 6) | (utf8[i+1] & 0x3F);
          i += 2;
        }
        else if( (ch & 0xF0) == 0xE0 )
        {
          wch = ((ch & 0x0F) << 12 ) | ((utf8[i+1] & 0x3F) << 6) |
            (utf8[i+2] & 0x3F);
          i += 3;
        }
        else
        {
          wch = '_';
          i += 4;
        }
        unicode += wch;
      }
      return unicode;
    }
    

    um aus einen UTF8-Char ein WideString zu bekommen.
    Diesen füge ich in das RichViewEdit ein, das dann automatisch das korrekte RTF erstellt.

    bis bald
    akari



  • Hallo, der Code funktioniert. Vielen Dank. Leider habe ich an der Stelle keine Möglichkeit, ein RichEdit zu nutzen, aber dasgeht auch so.

    Falls du Zeit hat, könntest du mir dan noch erklären, wie der Code genau arbeitet? Copy&Past vernichtet leider den Lerneffekt.

    Nochmal vielen Dank für die Hilfe

    mfg
    Raimond



  • Hallo

    diese Funktion arbeiten nach so einer Tabelle, um aus den Multibyte-Zeichen das korrekte Unicode-Zeichen zu bestimmen.

    bis bald
    akari


Anmelden zum Antworten