XML und Sonderzeichen in C++ (immer noch offen!!)
-
Ja ist es auch aber ich versteh nicht so ganz, wie ich diese Funktion einbinden kann, denn sonst ging das immer einfach so, dass ich diese Funktion einfach anwenden musste.
Gibt es nicht auch noch zufällig andere Funktionen, die ebenfalls auch das Ä Ü Ö dekodieren?
-
Also wie ich in der beigehängten Borland Hilfe sehen kann, ist die URLDecode keine Funktion, sondern eine Methode geworden, doch wie konnte man nochmal ein Object einer Klasse erstellen also wie konnte man die Klasse nochmal einbinden?
Borland Hilfe:
Indy.Sockets version 10.1.1.
URLDecode Method
Declaration
class function URLDecode(
ASrc: string
): string;
Parameters
Parameters Description
ASrc URL-encoded string to be decoded.Returns
String - The un-encoded ASCII representation of the URL.
Summary
Converts a URL-Encoded string to a US-ASCII string.
Description
URLDecode is a string class function that converts the URL-encoded string in ASrc to its representation in the US-ASCII character set. URLDecode is based on the URL character encoding rules as described in the Internet Standards document:
RFC 1738 - Uniform Resource Locators (URL)URLDecode can used to reverse any string encoding performed using URLEncode.
URLDecode converts all occurrances of the '+' character to ' ' (Space) (Decimal 32). URLDecode reads any values represented as a hexadecimal character triplet consisting of the "%" character followed by the two-digit hexadecimal value for the octet, and returns the value to its US-ASCII representation.
Example
AString := TIdURI.URLDecode(AURLString);
See Also
TIdURI.URLEncode
Class
TIdURI
-
Hallo,
Du mußt einfach ein Objekt vom Typ TIdURI erstellen. Dann kannst du dessen Membermethode nutzen. Etwa so
TIdURI* uri = new TIdURI; AnsiString decode = uri->URLDecode(code); // delete uri dann nicht vergessen
-
Danke, ich habe jetzt folgendes geschrieben:
TIdURI* uri = new TIdURI('asd'); uri->URLDecode("ads");Doch angeblich müsste ich noch einen weiteren Parameter angeben, erst TMetaClass, dann erst mein String:
[C++ Error] Unit1.cpp(70): E2034 Cannot convert 'char *' to 'TMetaClass *'
[C++ Error] Unit1.cpp(70): E2342 Type mismatch in parameter 'vmt' (wanted 'TMetaClass *', got 'char *')Doch was ist eine Variabel von TMetaClass oder so?!
Bzw wie müsste das dann aussehen?
-
Ich brauche immer noch Hilfe
-
Ok, ich hab mir mal die Headerdatei dazu angeschaut. Die Deklaration sieht so aus.
static AnsiString __fastcall URLDecode(TMetaClass* vmt, AnsiString ASrc);Wie man sieht, ist die Funktion statisch (benötigt also kein zusätzliches Objekt) und der Konstruktor benötigt zwei Parameter.
Der Aufruf müsste also so aussehen (ungetestet)TIdURI::URLDecode(__classid(TIdURI), "ads");
-
Wenn ich den Aufruf
TIdURI::URLDecode(__classid(TIdURI), "ads");schreibe, dann treten folgende Fehler auf:
[Linker Error] Error: Unresolved external 'Iduri::TIdURI::' referenced from ...UNIT1.OBJ
[Linker Error] Error: Unresolved external '__fastcall Iduri::TIdURI::URLDecode(System::TMetaClass *, System::AnsiString)' referenced from ...UNIT1.OBJWenn ich dann die Indy10 einbinde, dann treten mehrere Fehler in der Datei HTTPApp.hpp auf, diese Datei nutze ich hingegen nicht bewußt:
[C++ Error] Httpapp.hpp(94): E2293 ) expected
[C++ Error] Httpapp.hpp(983): E2189 extern variable cannot be initialized
[C++ Error] Httpapp.hpp(983): E2449 Size of 'ExtractHeaderFields' is unknown or zero
[C++ Error] Httpapp.hpp(983): E2188 Expression syntax
[C++ Error] Httpapp.hpp(983): E2293 ) expected
[C++ Error] Httpapp.hpp(984): E2189 extern variable cannot be initialized
[C++ Error] Httpapp.hpp(984): E2449 Size of 'ExtractHTTPFields' is unknown or zero
[C++ Error] Httpapp.hpp(984): E2188 Expression syntax
[C++ Error] Httpapp.hpp(984): E2293 ) expected
[C++ Warning] Unit1.cpp(96): W8004 'NodeList' is assigned a value that is never used
[C++ Error] Unit1.cpp(183): E2096 Illegal structure operation
[C++ Error] Unit1.cpp(319): E2096 Illegal structure operation
[C++ Error] Unit1.cpp(473): E2096 Illegal structure operation
[C++ Error] Unit1.cpp(584): E2096 Illegal structure operation
-
Die erste Fehlermeldung wird durch eine fehlende lib verursacht.
Versuche doch mal Indy9 statt 10 zu verwenden. Soweit ich weiß funktioniert Indy10 nicht richtig.
Ich spreche hier aber nicht aus Erfahrung, da ich die Indy-Bibliotheken noch nie verwendet habe.
-
Wenn ich die Indy9 einbinde treten die ersten beiden Fehler auf!
-
Was kann ich machen, sodass ich diese Funktion benutzen kann oder einfach irgendwas, sodass ich meinen Text decodieren kann?!
-
Hallo
Zumindestens das hier kompiliert :
TIdURI* uri = new TIdURI(0); AnsiString Text = uri->URLDecode(__classid(TIdURI), "ads"); delete uri;bis bald
akari
-
Danke aber irgendwie tritt jedes mal, wenn ich die Indy10 einbinde die oben gennanten Fehler in der httpapp auf!
Mit der Indy9 geht es garnicht.
Kann man irgendwo die httpapp in einer neueren Version downloaden oder was mache ich falsch???
Als include nehmen ich die IdURI.hpp...
-
Hallo
TheCaleb schrieb:
Danke aber irgendwie tritt jedes mal, wenn ich die Indy10
einbinde die oben gennanten Fehler in der httpapp auf!Indy 10 läuft auf dem Builder gar nicht.
Mit der Indy9 geht es garnicht.
Das glaube ich dir nicht. Ich habe ein normal installiertes Indy 9 und habe den geposteten Code kompiliert.
Desweiteren ist "geht nicht" keine Fehlerbeschreibung. Vermutlich hast du Indy 9 nicht richtig installiert bzw. im Projekt nicht richtig eingebunden.Kann man irgendwo die httpapp in einer neueren Version downloaden oder was mache ich falsch???
Du wirst wohl Indy nicht in Einzelteilen bekommen oder zum laufen kriegen.
Als include nehmen ich die IdURI.hpp...
Das ist richtig.
bis bald
akari
-
Ok, ich nehme nun Indy9(wurde von dem Borland Builder mit installiert), den Code von dir und die besagte Include- Datei.
Anschließend bekomme ich folgende Fehler:[Linker Error] Error: Unresolved external '__fastcall Iduri::TIdURI::TIdURI(const System::AnsiString)' referenced from ...\UNIT1.OBJ
[Linker Error] Error: Unresolved external 'Iduri::TIdURI::' referenced from ...\UNIT1.OBJ
[Linker Error] Error: Unresolved external '__fastcall Iduri::TIdURI::URLDecode(System::TMetaClass *, System::AnsiString)' referenced from ...\UNIT1.OBJ
-
Hallo
Du must in dem Projekt noch die Library-Pfade anpassen, in dem du den Pfad zu Indy einträgst.
bis bald
akari
-
Beim BCB2007 ist Indy10 mit dabei. Vielleicht läuft es ja da.
-
Hallo,
ich habe jetzt unter Linker -> Paths and Defines -> Library search path ;$(BDS)\lib\indy9 angehängt, das müsste ja der Pfad zu Indy sein oder so muss ich sonst noch was eintragen, denn die Fehler treten immer noch auf!
Was mache ich falsch oder was habe ich vergessen??
-
P.S. ich habe BCB 2006 und da ist Indy9 und 10 dabei.