Thema: Delphi Unicode Widestrings

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 

Re: Unicode Widestrings

  Alt 21. Nov 2005, 10:09
erinnert mich irgendwie an was ^^
drum hab ich in meinen Dateifunktionen auch 'ne Prüfung mit drin, welche erstmal das Format ermittelt und dann auch noch die Markerbytes überspringt.
Delphi-Quellcode:
Function TextMode(Var F: TFile): TFileMode;
  Var i: LargeInt;
    L: LongChar;
    R: LongInt;

  Begin
    F.RecSize_TextMode := fmANSI;
    i := FilePos(F);
    FilePos(F, 0);
    ReadData(F.FileHandle, @L, 4, @R, nil);
    If (R >= 4) and (L = $0000FEFF) Then F.RecSize_TextMode := fmUCS4
    Else If (R >= 4) and (L = $FFFE0000) Then F.RecSize_TextMode := fmUCS4BE
    Else If (R >= 2) and (Word(L) = $FEFF) Then F.RecSize_TextMode := fmUCS2
    Else If (R >= 2) and (Word(L) = $FFFE) Then F.RecSize_TextMode := fmUCS2BE;
    If (F.RecSize_TextMode = fmUCS2) or (F.RecSize_TextMode = fmUCS2BE) Then Begin
      If i > 2 Then Inc(i) Else i := 2;
      TLargeIntRec(i).Lo := TLargeIntRec(i).Lo and not 1;
    End Else If (F.RecSize_TextMode = fmUCS4) or (F.RecSize_TextMode = fmUCS4BE) Then Begin
      If i > 4 Then Inc(i, 3) Else i := 4;
      TLargeIntRec(i).Lo := TLargeIntRec(i).Lo and not 3;
    End;
    FilePos(F, i);
    Result := F.RecSize_TextMode;
  End;
Aber hier ist ja anscheinend schon sicher, daß es sich um eine UnicodeDatei handelt, bleibt aber noch ungeklärt, ob BigEndian, oder LowerEndian kodiert und ob überhaupt ein Markerbyte vorhanden ist...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat