Hallo,
ich mache gerade ein paar Source-Reviews und stieß auf ein Problem mit der UTF8Encode Fkt. aus System.pas in Verbindung mit der
VCL Unit EncdDecd.
Gegen sei folgender Source:
Delphi-Quellcode:
uses
EncdDecd, Dialogs;
...
var
s: UnicodeString; // bei D2006 ein WideString
begin
s := 'Hätten Hüte ein ß im Namen, wären sie möglicherweise keine Hüte mehr,'+ sLineBreak +
'sondern Hüße.' + sLineBreak;
ShowMessage(EncodeString(UTF8Encode(s)));
end;
UTF8Encode ist unter D2009 prinzipiell überflüssig, wenn man eine Typzuweisung über tmpstr: Utf8String o.ä. macht. Das Ergebnis wird dadurch nicht verändert.
Nun zum Ausgabeergebnis:
D2006 (korrekt):
SMOkdHRlbiBIw7x0ZSBlaW4gw58gaW0gTmFtZW4sIHfDpHJlbi BzaWUgbcO2Z2xpY2hlcndlaXNl
IGtlaW5lIEjDvHRlIG1laHIsDQpzb25kZXJuIEjDvMOfZS4NCg ==
D2009:
SOR0dGVuIEj8dGUgZWluIN8gaW0gTmFtZW4sIHfkcmVuIHNpZS Bt9mdsaWNoZXJ3ZWlzZSBrZWlu
ZSBI/HRlIG1laHIsDQpzb25kZXJuIEj832UuDQo=
EncodeString arbeitet intern an dem String als Stream. Wenn man den Base64 aus D2009 umgekehrt, ist dieser sofort als
Unicode lesbar (ohne UTF8Decode).
Was stimmt hier nicht? Verwende ich UTF8Encode falsch (wie gesagt Zuweisung über UTF8String bringt selbes Ergebnis).
Edit: Nachtrag. Es liegt nicht an EncdDecd, sondern defintiv an der Ausgabe von UTF8Encode. Gebe ich EncdDecd einen beliebigen String mit dem manuell UTF8-codierten String aus obigem Text, ist das Resultat identisch.
Dies führt zur Frage:
Arbeitet UTF8Encode richtig in D2009? oder stehe ich gerade auf dem Schlauch nach so vielen Wochen
Unicode?
Gruß Assertor