Windos - ANSI

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Windos - ANSI

Beitrag von hbr »

Hallo,
habe leider wo nirgends etwas im Netz gefunden.
Lazarus kann nicht im ANSI-Format text.txt / *.csv abspeichern.

Wie kann man das realisieren?

Windows Excel öffnet Standartmäßig im ANSI-Mode.
Man kann natürlich eine mit Lazarus UTF8 erzeugte Datei in Excel öffnen, dazu muss man jedoch erst Excel öffnen und über (Daten > Text öffnen) UTF8 zum Import einstellen.
Ändert man eine geladene Datei und speichert diese wieder als .csv ab,
so hat man wieder eine Windows Standard ANSI Datei.
Wie könnte man so etwas mit Lazarus realisieren.
Ich meine ANSI-Textbasierte Dateien(Umlaute Probleme) abspeichern und einlesen.
Wer kann hier weiterhelfen?

Gruß

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Windos - ANSI

Beitrag von theo »

Du hast im anderen Beitrag geschrieben, UTF8ToAnsi ginge nicht. Warum nicht? Wie kommst du drauf? Steht das im Bugtracker?

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Windos - ANSI

Beitrag von wp_xyz »

hbr hat geschrieben:Hallo,
habe leider wo nirgends etwas im Netz gefunden.
Lazarus kann nicht im ANSI-Format text.txt / *.csv abspeichern.
Nein, das stimmt nicht. Lazarus lässt beim Speichern die String-Kodierung unverändert. Also wenn du die Strings vor dem Speichern nach ANSI umwandelst, werden sie auch so gespeichert. Die Umwandlung machst du z.B. mit UTF8ToWinCP().

Code: Alles auswählen

uses LazUTF8;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  F: TextFile;
begin
  AssignFile(F, 'd:\test.txt');
  Rewrite(F);
  WriteLn(F, UTF8ToWinCP('ä;ö;ü'));
  CloseFile(F);
end;  
Die hier erzeugte Datei wird problemlos und korrekt mit Excel geöffnet.

Verwende nicht mehr die früher empfohlenen "UTF8ToAnsi" und "UTF8ToSys", die machen teilweise nichts, teilweise etwas anderes als man erwartet und erzeugen nur Verwirrung (zumindest auf der Windows-Plattform).

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Windos - ANSI

Beitrag von theo »

wp_xyz hat geschrieben: Verwende nicht mehr die früher empfohlenen "UTF8ToAnsi" und "UTF8ToSys", die machen teilweise nichts, teilweise etwas anderes als man erwartet und erzeugen nur Verwirrung (zumindest auf der Windows-Plattform).
Warum? Ist das irgendwo dokumentiert?

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Windos - ANSI

Beitrag von hbr »

Super Danke,
bin nicht fündig geworden bei meiner Suche, schon gar nicht,
dass es jetzt eine Unit 'LazUTF8' gibt, wo UTF8ToAnsi durch UTF8ToWinCP ersetzt wird.

Das Gegenstück WinCPToUTF8 funktioniert auch.

Gruß

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Windos - ANSI

Beitrag von wp_xyz »

theo hat geschrieben:
wp_xyz hat geschrieben: Verwende nicht mehr die früher empfohlenen "UTF8ToAnsi" und "UTF8ToSys", die machen teilweise nichts, teilweise etwas anderes als man erwartet und erzeugen nur Verwirrung (zumindest auf der Windows-Plattform).
Warum? Ist das irgendwo dokumentiert?
Das Referenzdokument http://wiki.freepascal.org/Better_Unico ... in_Lazarus ist sehr schwer verdaulich... Der Quellcode ist klarer:

Code: Alles auswählen

function SysToUTF8(const s: string): string;
begin
  {$IFDEF UTF8_RTL}
  Result:=s;           // <-- String wird direkt durchgereicht
  {$ELSE}
    ... ist bei mir nicht aktiv
  {$ENDIF}
end;
 
function Utf8ToAnsi(const s : RawByteString) : RawByteString;
begin
  Result:=RawByteString(Utf8Decode(s));   // <-- string wird zu einem WideString. Das ist doch nicht Ansi! --> unverständlich...
end;
Jede zweite Frage zum Thema neue Strings im englischen Forum geht darum, dass diese Funktionen nicht mehr so funktionieren wie erwartet. Keine Ahnung warum man das auf diese Art geändert hat.

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Windos - ANSI

Beitrag von theo »

Hmmm, scheint mir alles in Bearbeitung und noch nicht fertig zu sein.
Keine Ahnung und im Moment auch keine Lust, da hinterher zu laufen. :|

Aber dass es mit den "schlauen" Strings zum kompletten Durcheinander kommen würde, hatte ich schon vor Jahren befürchtet.

huweb
Beiträge: 22
Registriert: Mi 3. Jun 2015, 00:22
OS, Lazarus, FPC: Win10, Laz 1.4.2 FPC 2.6.4
CPU-Target: 64Bit
Wohnort: Mödling bei Wien
Kontaktdaten:

Re: Windos - ANSI

Beitrag von huweb »

wp_xyz hat geschrieben:
hbr hat geschrieben:Hallo,
habe leider wo nirgends etwas im Netz gefunden.
Lazarus kann nicht im ANSI-Format text.txt / *.csv abspeichern.
Nein, das stimmt nicht. Lazarus lässt beim Speichern die String-Kodierung unverändert. Also wenn du die Strings vor dem Speichern nach ANSI umwandelst, werden sie auch so gespeichert. Die Umwandlung machst du z.B. mit UTF8ToWinCP().

Code: Alles auswählen

uses LazUTF8;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  F: TextFile;
begin
  AssignFile(F, 'd:\test.txt');
  Rewrite(F);
  WriteLn(F, UTF8ToWinCP('ä;ö;ü'));
  CloseFile(F);
end;  
Die hier erzeugte Datei wird problemlos und korrekt mit Excel geöffnet.

Verwende nicht mehr die früher empfohlenen "UTF8ToAnsi" und "UTF8ToSys", die machen teilweise nichts, teilweise etwas anderes als man erwartet und erzeugen nur Verwirrung (zumindest auf der Windows-Plattform).
DANKE! DANKE!
das scheint wirklich die einzige Möglichkeit zu sein eine ANSI-Textdatei zu erstellen. Alle Versuche mit ...saveToFile schlugen fehl.
Danke nochmals!
Heinz
LG Heinz

Antworten