Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ansi, Unicode & HTML-Strings (https://www.delphipraxis.net/169182-ansi-unicode-html-strings.html)

G-Baumstamm 3. Jul 2012 23:59

Delphi-Version: 7

Ansi, Unicode & HTML-Strings
 
Hallihallo,

ich habe folgendes Problem: Ich habe eine Textdatei, die anscheinend Unicode-kodiert ist. Zumindest enthält sie russische Buchstaben und nicht Ansi-Sonderzeichen, wie z.B. ein kleines i ohne Punkt (ı), das heißt doch dann das sie Unicode-kodiert ist, oder?

Auf jeden Fall muss ich jetzt zum einen Zeichen aus diesem Dokument auf meiner Form anzeigen, und zum anderen in einen Adress-String für HTML einbauen. Zum Anzeigen habe ich die TNT-Komponenten, welche die Sonderzeichen auch wunderbar darstellen, allerdings bekomme ich sie einfach nicht aus der Datei raus. Hab mich dumm und dämlich gesucht, aber irgendwie nichts gefunden was mir weiterhilft ... kann jemandn von euch mir da auf die Sprünge helfen?

Das mit den HTML-Strings habe ich vorher mit HTTPEncode(AnsiToUTF8(Name)) gemacht, allerdings muss ich, jetzt wo ich Unicode brauche, die Strings ja sicherlich irgendwie anders speichern, da wird das dann mit dem Ansi nicht mehr gehen ...

Ich benutze Delphi 7, die ganzen Unicode-Features der neueren Delphi-Versionen fallen also leider weg.

Danke im voraus =)

himitsu 4. Jul 2012 00:09

AW: Ansi, Unicode & HTML-Strings
 
Zitat:

Zitat von G-Baumstamm (Beitrag 1173412)
das heißt doch dann das sie Unicode-kodiert ist, oder?

Nö,
aber die Codierung sollte, bei einer ordentlichen HTML-Datei im Header drin stehn (siehe Encoding).

Codepage, UTF-8, UCS2, UTF-16, .................


WideString (Unicode = UTF-16) hast du.
Eine TTntStringList für Unicode hast du auch und mit etwas Glück kannst du dieser das entsprechende Encoding mitteilen, damit sie den Text ordentlich ausliest/übersetzt.

G-Baumstamm 4. Jul 2012 08:33

AW: Ansi, Unicode & HTML-Strings
 
Hey,

anscheinend hab ich das nen bisschen unklar ausgedrückt, die Zeichen die ich einlesen will befinden sich nicht in einer HTML-Datei, sondern in einer einfachen .txt Datei. Diese will ich dann in meinem Programm darstellen.

Anschließend muss ich daraus noch die Adresse einer HTML Datei berechnen, in der die ganzen Sonderzeichen also mit %XX escapet werden müssen.

Edit: Vielleicht mal ein Beispiel:

In meiner .txt Datei stehen etwa 50 Zeilen, wovon aber nur etwa ~10 Wörter für mich interessant sind, die will ich auslesen und in ne Stringlist schreiben & speichern. Diese Wörter zu ermitteln ist für mich kein Problem, nehmen wir an eines dieser Wörter sei "Привет". Die russischen Zeichen kann ich z.B. in einem TnTLabel vernünftig darstellen, allerdings schaffe ich es nicht, sie aus der Datei auszulesen & in das Label zu transferieren, weil ich mit dem Unicode nicht klarkomme.

Anschließend möchte ich eine Webanfrage simulieren, bei der der entsprechende Begriff in eine Suchleiste eingegeben wird, am Beispiel von Wikipedia müsste ich zu "Привет" also folgenden Adressstring für meine Http.Get-Methode ermitteln: "http://de.wikipedia.org/w/index.php?search=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1 %82".

Hoffe jetzt is klar was ich meine =)

jaenicke 4. Jul 2012 09:35

AW: Ansi, Unicode & HTML-Strings
 
Indy sollte die Kodierung der URL machen können. Wie das mit Indy und Unicode allerdings bei Delphi 7 aussieht, kann ich dir nicht sagen.

Furtbichler 4. Jul 2012 10:07

AW: Ansi, Unicode & HTML-Strings
 
Versuche mal eine TWideStringList zu verwenden. Textdateien haben ein BOM, und deshalb siehst Du alles korrekt. Beim Einlesen in eine TStringList wird die BOM aber ignoriert (soweit ich mich erinnere).

Gibt es kein TTNTMemo, mit der Du die Datei einlesen kannst?

p80286 4. Jul 2012 10:21

AW: Ansi, Unicode & HTML-Strings
 
Zitat:

Zitat von G-Baumstamm (Beitrag 1173412)
Ich habe eine Textdatei, die anscheinend Unicode-kodiert ist.

wie wäre es, sich einmal einen Hex-Dump dieser Datei anzusehen?
Dann wäre klar was darin steht und niemand ist darauf angewiesen irgendetwas zu spekulieren.

Gruß
K-H

G-Baumstamm 4. Jul 2012 11:48

AW: Ansi, Unicode & HTML-Strings
 
Zitat:

Zitat von Furtbichler (Beitrag 1173467)
Versuche mal eine TWideStringList zu verwenden. Textdateien haben ein BOM, und deshalb siehst Du alles korrekt. Beim Einlesen in eine TStringList wird die BOM aber ignoriert (soweit ich mich erinnere).

Gibt es kein TTNTMemo, mit der Du die Datei einlesen kannst?

Hey, danke, das hat mir schonmal geholfen! TWideStringList gibts zwar anscheinend unter Delphi 7 noch nicht, allerdings kann man hierfür eine TTnTStringList nehmen, die kann natürlich auch Unicode. Also einfach die Textdatei in die TnTStringList einlesen, und solange man ansonsten nur widestrings anstelle von strings benutzt, kann man damit dann auch vernünftig arbeiten.

Die korrekte Webanfrage kann man erstellen, indem man den entsprechenden String mit HTTPEncode(UTF8Encode(meinString)); bearbeitet.

Das Problem was dabei entsteht, ist allerdings folgendes: Bei der .txt-Datei, die ich lesen möchte, handelt es sich um ein LogFile, welches zu dem Zeitpunkt, wo ich auf die Datei zugreifen möchte, noch erweitert wird, also von der Anwendung gelockt ist. Wie kann ich jetzt mit LoadFromFile trotzdem darauf zugreifen (ich will ja nur Lesen ...)?

Edit: Mit dem Editor kann ich das Textfile weiterhin öffnen, also kann es nicht komplett gelockt sein.

jaenicke 4. Jul 2012 12:52

AW: Ansi, Unicode & HTML-Strings
 
Mit einem TFileStream mit fmShareDenyNone als Modus sollte es dann gehen. Danach kannst du dann vermutlich LoadFromStream in der StringList nehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz