Einzelnen Beitrag anzeigen

FlatCoder

Registriert seit: 18. Mai 2005
12 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Migration von Firebirdprojekt (Delphi 2006 nach delphi 2

  Alt 13. Okt 2009, 09:05
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
  Mit Zitat antworten Zitat