Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTML? decodieren (https://www.delphipraxis.net/26328-html-decodieren.html)

hitzi 22. Jul 2004 08:14


HTML? decodieren
 
Hallo,

ich bekomme von einem Obex Server eine XML Datei zurück geliefert. In dieser steht zum Beispiel auch der Eintrag "Töne". Leider wird mir 'T' + #$C3#$B6 + 'ne' zurückgeliefert. Erkennt jemand nach welchen Schema das codiert ist?
Für das Zeichen 'ö' werden die beiden Hexcodes C3 und B6 verwendet.

MfG Hitzi

Phoenix 22. Jul 2004 08:21

Re: HTML? decodieren
 
Meines wissens ist das Unicode, da hier ein Zeichen 2 Bytes belegt.

hitzi 22. Jul 2004 08:28

Re: HTML? decodieren
 
Und wie wird ein Unicodezeichen in ein "normales" Zeichen umgewandelt?

Habe bisher noch nichts mit Unicodezeichen gemacht :?

MfG Hitzi

Steve 22. Jul 2004 08:32

Re: HTML? decodieren
 
UTF-8
UTF-8 Encoding & Decoding
:)

Gruß
Stephan

edit: Kompo

sakura 22. Jul 2004 08:37

Re: HTML? decodieren
 
Hier mal eine Quick&Dirty Routine für UTF-8 nach WideString.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Res: array[0..1024] of WideChar;
  S: AnsiString;
begin
  S := 'T' + #$C3#$B6 + 'ne';
  MultiByteToWideChar(CP_UTF8, 0, PChar(S), -1, @Res[0], SizeOf(Res));
  ShowMessage(Res);
end;
...:cat:...

Bernhard Geyer 22. Jul 2004 08:49

Re: HTML? decodieren
 
Falls es wirklich eine XML-Datei ist, so nimm doch einen Parser wie OpenXML. Handdecodierung bei XML-Datein ist m.E. nicht mehr angesagt.

hitzi 22. Jul 2004 09:07

Re: HTML? decodieren
 
Danke für eure Antworten.

Es ist wirklich eine XML Datei, aber mit so simplen Aufbau, dass der Overhead, welcher durch einen Parser entsteht, nicht gerechtfertigt ist.

Ich habe Sakuras Funktion wie folgt abgeändert. Irgendwelche Verbesserungen, Vorschläge dazu?

Delphi-Quellcode:
function AnsiToStr(s : AnsiString) : string;
var Res : array of WideChar;
    len, i : integer;
begin
  result := '';
  len := MultiByteToWideChar(CP_UTF8, 0, PChar(s), - 1, nil, 0);
  if len > 0 then begin
    setlength(Res, len);
    MultiByteToWideChar(CP_UTF8, 0, PChar(s), -1, @Res[0], SizeOf(Res));
    for i := 0 to SizeOf(Res) - 1 do result := result + res[i];
  end;
end;

MfG Hitzi

hitzi 22. Jul 2004 09:16

Re: HTML? decodieren
 
Hmm ... da ist noch ein Fehler in der Funktion.
Es werden immer nur vier Zeichen zurückgeliefert. :cry:

mirage228 22. Jul 2004 09:19

Re: HTML? decodieren
 
Hi,

gibt SizeOf(Res) den richtigen Wert zurück?

mfG
mirage228

hitzi 22. Jul 2004 09:24

Re: HTML? decodieren
 
Danke - das war der richtige Hinweis. Habe SizeOf() in Length() abgeändert und nun funktioniert es.

Mfg Hitzi

sakura 22. Jul 2004 09:38

Re: HTML? decodieren
 
Zitat:

Zitat von hitzi
das war der richtige Hinweis. Habe SizeOf() in Length() abgeändert und nun funktioniert es.

Schreibe doch gleich Deine Variable len rein, die ist doch noch gesetzt und hat den richtigen Wert.

...:cat:...

hitzi 22. Jul 2004 10:05

Re: HTML? decodieren
 
Stimmt :) Mach doch sofort - danke

hitzi 22. Jul 2004 10:06

Re: HTML? decodieren
 
Gibt es eigentlich eine Möglichkeit diese zeile zu optimieren:
Delphi-Quellcode:
for i := 0 to len - 1 do result := result + res[i];
Oder macht das keinen Sinn?

MfG Hitzi

sakura 22. Jul 2004 10:12

Re: HTML? decodieren
 
Zitat:

Zitat von hitzi
Gibt es eigentlich eine Möglichkeit diese zeile zu optimieren

Ja :mrgreen:

Delphi-Quellcode:
Result := Res
, den Rest macht Delphi.-

...:cat:...

hitzi 22. Jul 2004 10:14

Re: HTML? decodieren
 
Nope, das hatte ich schon ausprobiert! Fehler -> Inkombatible Typen: String und Dynamic Array

MfG Hitzi

mirage228 22. Jul 2004 10:19

Re: HTML? decodieren
 
Hi,

ich glaube diese Zuweisung geht nur bei Arrays fester Länge.

mfG
mirage228

sakura 22. Jul 2004 10:20

Re: HTML? decodieren
 
Zitat:

Zitat von hitzi
Nope, das hatte ich schon ausprobiert! Fehler -> Inkombatible Typen: String und Dynamic Array

Na gut, dann halt so:
Delphi-Quellcode:
Result := WideString(PWideChar(@Res[0]));
...:cat:...

hitzi 22. Jul 2004 10:23

Re: HTML? decodieren
 
Danke - funktioniert :)


Hitzi

hitzi 22. Jul 2004 11:26

Re: HTML? decodieren
 
Wie macht man das wieder rückgängig?

Mit folgender Funktion funktionierts leider nicht so wie gewollt:

Delphi-Quellcode:
function StrToAnsi(s : WideString) : AnsiString;
var len : integer;
begin
  result := '';
  len := WideCharToMultiByte(CP_ACP, 0, PWideChar(s), - 1, nil, 0, nil, nil);
  if len > 0 then begin
    setlength(Result, len);
    WideCharToMultiByte(CP_ACP, 0, PWideChar(s), -1, Pchar(Result), len, nil, nil);
  end;
end;
Ich übergeben "Töne" an die Funktion und die liefert mir auch "Töne" wieder zurück und nicht wie erwartet 'T' + #$C3#$B6 + 'ne'

Woran liegt das?


Mfg Hitzi


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 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-2025 by Thomas Breitkreuz