Also ich habe mir ursprünglich mal eine Funktion geschrieben die da lautet:
Delphi-Quellcode:
FUNCTION UTF8Decode2(Wert: RawByteString): WideString;
var
Temp: WideString;
begin
Temp := trim(UTF8Decode(Wert));
if Temp = '' then begin
Temp := Wert;
end;//if Temp = '' then begin
Result := Temp;
end;
Über Sinn oder Unsinn der Funktion lässt sich bekanntlich streiten...
Ich habe nur gemerkt: Wenn die Funktion UTF8Decode fehlgeschlagen ist, gibt sie einen leeren String aus.
Dann habe ich den Wert genommen, der drinstand und als Ergebnis ausgegeben.
Dieses Verhalten gilt für die NEUE UTF8Decode NICHT mehr. Er verschluckt einfach die Zeichen
die er nicht verarbeiten kann und gibt also keinen leeren String wieder.
Ich untersuchte die ALTE Funktion auf Delphi 2006 und stellte fest, dass diese etwas anders arbeitet
wie die, aus Delphi 2009. Was ja sein muss.
Eine Übernahme der ALTEN Funktion würde ja ein COPYRIGHT Recht verletzen. Zum Test habe ich sie trotzdem
mal übernommen und die Funktion wandelte sich zu:
Delphi-Quellcode:
FUNCTION UTF8Decode2(Wert: RawByteString): WideString;
var
Temp: WideString;
begin
Temp := trim(UTF8Decode_Step1(Wert));
if Temp = '' then begin
Temp := Wert;
end;//if Temp = '' then begin
Result := Temp;
end;
STEP1 deswegen, weil ich feststellte, dass INTERN in der Systemunit noch eine Funktion Namens
UnicodeToUtf8
aufgerufen wird.
Diese wiederum unterscheidet sich WIEDER von der in Delphi2009.
Ich übernahm die alte Methode zum Test und stellte noch einen PChar auf PAnsiChar um.
Auf der Funktion wurde dann die
UnicodeToUtf8_Step2
Ich weis, alles nicht copyrightgerecht und ich werde mit dieser Methode irgendwann
gegen die Wand fahren weil ich irgendwas nicht beachtet habe.
Aber es war erst einmal TESTWEISE ein Weg, wie ich es zumindest nachvollziehen
und eventuell für zumindest die alte Datenbank weiternutzen könnte,
wenn ich entsprechend aus dem Originalcode lerne und ihn nicht 100%ig übernehme.
Bis dann
Ingo