Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: UnicodeKonverter

  Alt 30. Okt 2007, 14:22
Zitat von BUG:
@xZise
type TUniCharBuffer = packed array[0..(high(TSize) div SizeOf(TUniChar) -1)] of TUniChar; Hieran liegt es, oder?
Probiers so:type TUniCharBuffer = packed array[0..(2147483648 div SizeOf(TUniChar) -1)] of TUniChar; (2147483648 = 2 GByte)
Seltsam Übrigens hat er noch nichtmal das akzeptiert. Erst als ich 2GiB - 1 genommen habe.

Aber z.Zt. mach die Funktion Probleme:
Delphi-Quellcode:
function readStringFromStream(src: TStream; x: TStringFormat; stop: TReadStop; dest: TUniString): TReadStop;
var readfunc: TReadFunc;
    cur : TUniChar;
begin
     readfunc := getReadFunc(x);
     result := $00;
     if assigned(readfunc) then
     begin
          while (true) do
          begin
               try
                  cur := readfunc(src);
               except
                     on EUnExpectedEndOfStream do
                     begin
                          result := RS_END_OF_STREAM;
                          break;
                     end else raise;
               end;
               if isCharEqual(cur, TUNICHAR_NL_UNIX) and (stop and RS_NL_UNIX = RS_NL_UNIX) then
               begin
                    result := RS_NL_UNIX;
                    break;
               end;
               if isCharEqual(cur, TUNICHAR_NL_MAC) and (stop and RS_NL_MAC = RS_NL_MAC) then
               begin
                    result := RS_NL_MAC;
                    break;
               end;
               if isCharEqual(cur, TUNICHAR_NULL) and (stop and RS_NULL = RS_NULL) then
               begin
                    result := RS_NULL;
                    break;
               end;
               dest.addChar(cur);
          end;
     end else raise EUnicode.Create('Stringformat not supported: '+ StringFormatToString(x));
end;
Und zwar bleibt er da hängen.

MfG
xZise

PS: Vielleicht ist es wichtig, aber so speichere ich:
Delphi-Quellcode:
fs := TFileStream.Create(<Dateiname>, fmCreate);
temp := TUniString.Create;
ms := TMemoryStream.Create;
try
  temp.setTrimFlag(false);
  temp.setBufferSize(256);
  Memo.Lines.SaveToStream(ms);
  writeBOM(Format, fs);
  readStringFromStream(ms, Format, RS_END_OF_STREAM, temp);
  writeStringToStream(temp, Format, fs);
finally
  ms.Free;
  fs.Free;
  temp.Free;
end;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat