![]() |
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 |
Re: HTML? decodieren
Meines wissens ist das Unicode, da hier ein Zeichen 2 Bytes belegt.
|
Re: HTML? decodieren
Und wie wird ein Unicodezeichen in ein "normales" Zeichen umgewandelt?
Habe bisher noch nichts mit Unicodezeichen gemacht :? MfG Hitzi |
Re: HTML? decodieren
|
Re: HTML? decodieren
Hier mal eine Quick&Dirty Routine für UTF-8 nach WideString.
Delphi-Quellcode:
...:cat:...
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; |
Re: HTML? decodieren
Falls es wirklich eine XML-Datei ist, so nimm doch einen Parser wie
![]() |
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 |
Re: HTML? decodieren
Hmm ... da ist noch ein Fehler in der Funktion.
Es werden immer nur vier Zeichen zurückgeliefert. :cry: |
Re: HTML? decodieren
Hi,
gibt SizeOf(Res) den richtigen Wert zurück? mfG mirage228 |
Re: HTML? decodieren
Danke - das war der richtige Hinweis. Habe SizeOf() in Length() abgeändert und nun funktioniert es.
Mfg Hitzi |
Re: HTML? decodieren
Zitat:
...:cat:... |
Re: HTML? decodieren
Stimmt :) Mach doch sofort - danke
|
Re: HTML? decodieren
Gibt es eigentlich eine Möglichkeit diese zeile zu optimieren:
Delphi-Quellcode:
Oder macht das keinen Sinn?
for i := 0 to len - 1 do result := result + res[i];
MfG Hitzi |
Re: HTML? decodieren
Zitat:
Delphi-Quellcode:
, den Rest macht Delphi.-
Result := Res
...:cat:... |
Re: HTML? decodieren
Nope, das hatte ich schon ausprobiert! Fehler -> Inkombatible Typen: String und Dynamic Array
MfG Hitzi |
Re: HTML? decodieren
Hi,
ich glaube diese Zuweisung geht nur bei Arrays fester Länge. mfG mirage228 |
Re: HTML? decodieren
Zitat:
Delphi-Quellcode:
...:cat:...
Result := WideString(PWideChar(@Res[0]));
|
Re: HTML? decodieren
Danke - funktioniert :)
Hitzi |
Re: HTML? decodieren
Wie macht man das wieder rückgängig?
Mit folgender Funktion funktionierts leider nicht so wie gewollt:
Delphi-Quellcode:
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'
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; 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