Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Typ. Dateien und Unicode (https://www.delphipraxis.net/146742-probleme-mit-typ-dateien-und-unicode.html)

samy99 26. Jan 2010 14:24


Probleme mit Typ. Dateien und Unicode
 
Guten Tag

Bin von einer älteren Delphi Version auf Delphi 2010 umgestiegen und bin daran einige meiner Projekte in die neue Version zu konvertieren.

Ich verwende dabei eine Record-Datei in die nun diverse Strings gespeichert werden sollen. Früher waren dies normale Ansi-Strings, neu sollten diese natürlich auch Unicode unterstützen.

Wenn ich so vorgehe, wie in diesem Code-Beispiel, werden die Unicode-Strings in Ansi-Strings umgewandelt, und dabei die weiteren Information zerstört bzw. gehen verlohren. String ist Unicode String[x] ist Ansistring...

Delphi-Quellcode:
type

 RTest = record    
    Str1:String[20];
    Comts:String[30];
    id:longint;
  end;

Procedure Test(filename:string);
var
  f: file of RTest;
  a: RTest;
begin
  a.Str1:='Test1';
  a.Comts:='Test...';
  id:=1000;
  AssignFile(f,filename);
  Rewrite(f);
  Write(f,a);
  CloseFile(f);
end;
Wie kann ich einfach und sicher Unicode-Strings in einer solchen Datei speichern?

Vielen Dank für einen Tipp.

Mit freundlichen Grüssen
Sam

himitsu 26. Jan 2010 14:39

Re: Probleme mit Typ. Dateien und Unicode
 
Tach :hi:

Zitat:

Zitat von samy99
String[x] ist Ansistring

Njain, es ist ein ShortString.

Zwar gleiche "Char"-Größe, aber andere Speicherverwaltung.


Ein paar Threads dazu:
http://www.delphipraxis.net/internal...t.php?t=166999
http://www.delphipraxis.net/internal...t.php?t=164911
http://www.delphipraxis.net/internal...t.php?t=159877


Nativ hat Delphi/Pascal diesbezüglich also nichts für Unicode zu bieten, abgesehn von einem statischen WideChar-Array.


Eine andere Lösung wäre UTF8, so macht es Delphi selber. (die Klassennamen werden in der RTTI weiterhin als ShortString gespeichert, aber beim Auslesen werden diese als UTF8 behandelt und nach Unicode umgewandelt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz