Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück (https://www.delphipraxis.net/181806-delphi-xe5-system-utf8encode-gibt-iso-8859-1-format-zurueck.html)

michele_tedesco 10. Sep 2014 11:26

Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Hallo zusammen

Ich habe heute versucht ein String "für" in UTF8 zu encodieren.
Dabei erhalte ich aber "f%FCr" zurück, anstatt "f%C3%BCr".

Als Referenz für den "korrekten" UTF8 String habe ich folgende Seite verwendet: http://www.url-encode-decode.com/

"f%FCr" entspricht dem Format ISO-8859-1 und nicht UTF-8. Wie gibt die Methode einen String mit dem falschen Format zurück??

Danke für eure Unrterstützung.

Hier noch der Code:
Delphi-Quellcode:
Utf8Encode('für');

jbg 10. Sep 2014 11:39

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Und welchen Typ hat die Variable, der du das "Utf8Encode('für')" zuweist? Nicht, dass der Compiler dir hier ein UTF8 nach ANSI einbaut.

michele_tedesco 10. Sep 2014 12:05

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Es geht um den variablen-Typ STRING. Ich nehme an an dass in XE 5 dies ein Widestring ist. korrekt?
Danke :-)

uligerhardt 10. Sep 2014 12:35

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Zitat:

Zitat von michele_tedesco (Beitrag 1271998)
Es geht um den variablen-Typ STRING. Ich nehme an an dass in XE 5 dies ein Widestring ist. korrekt?

Falsch. :-)
Ein UnicodeString.

michele_tedesco 10. Sep 2014 13:21

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Gut :-)

Jetzt bin ich schon Mal schlauer.

Dazu kommt noch, dass das Ziel der Funktion ist ein UTF8 string in ein Unicode-String umzuwandeln.
Der "alte" Code in Delphi 2007 verarbeitete ANSI Strings folgendermassen:
Delphi-Quellcode:
function UrlEncode(EncodeStr : STRING): STRING;
var I,J : INTEGER;
    Help : AnsiString;
begin
  Result := '';
  for I := 1 to Length(EncodeStr) do begin
    if EncodeStr[I] in ['0'..'9','a'..'z','A'..'Z','$','-','_','.','+','!','*','(',')'] then
      Result := Result+EncodeStr[I]
    else begin
      Help := Utf8Encode(EncodeStr[I]);
      FOR J := 1 TO LENGTH(Help) DO
        Result := Result+'%'+IntToHex(Ord(Help[J]),2);
    end; (* else *)
  end;
end;
Nun ist die Applikation auf XE5 portiert worden und muss somit mit Unicodestrings arbeiten.
Somit stimmmt der Teil
Delphi-Quellcode:
Result := Result+'%'+IntToHex(Ord(Help[J]),2);
nicht mehr.

Gibt es in Delphi XE5 eine Stadart-Funktion dafür oder muss man selber eine schreiben?

Uwe Raabe 10. Sep 2014 13:33

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Zitat:

Zitat von michele_tedesco (Beitrag 1272014)
Gibt es in Delphi XE5 eine Stadart-Funktion dafür oder muss man selber eine schreiben?

Ja, in IdURI.pas:
Delphi-Quellcode:
TIdURI.URLEncode

michele_tedesco 11. Sep 2014 09:23

AW: Delphi XE5 System Utf8Encode gibt ISO-8859-1 Format zurück
 
Vielen Dank :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.

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