Thema: Delphi Unicode Widestrings

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.214 Beiträge
 
Delphi 12 Athens
 
#4

Re: Unicode Widestrings

  Alt 21. Nov 2005, 11: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...
$2B or not $2B
  Mit Zitat antworten Zitat