Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konsolenanwendung Zeichensatz (https://www.delphipraxis.net/69374-konsolenanwendung-zeichensatz.html)

Olli 14. Mai 2006 15:45

Re: Konsolenanwendung Zeichensatz
 
Zitat:

Zitat von Martin K
Aber ich würde es gerne mit der anderen Methode machen, dass die Strings im Quellcode direkt im DOS-Zeichensatz formatiert sind.

Kein Problem. Öffne ein DOS-Fenster, gib ein 'EDIT' und öffne aus dem DOS-Editor heraus deine Datei. Nun kannst du deinen Delphi-Source mit dem DOS-Editor bearbeiten.

Etwas unpraktikabel vielleicht, aber allemal eine Variante.

Martin K 14. Mai 2006 15:49

Re: Konsolenanwendung Zeichensatz
 
Hm, ja das ist eine Möglichkeit, finde ich aber nicht sehr gut.

Ich hätte es gerne so:
Zitat:

Zitat von Martin K
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?

Weil ich auch noch andere Units eingebunden habe, die auch Strings mit Umlauten in Funktionen/Prozeduren zurückliefern.

Olli 14. Mai 2006 15:54

Re: Konsolenanwendung Zeichensatz
 
Zitat:

Zitat von Martin K
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?

Nein. Und die benutzte Codeseite entspricht den Einstellungen deines Systems (oder deines Benutzers, je nachdem).

Martin K 14. Mai 2006 16:01

Re: Konsolenanwendung Zeichensatz
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Martin K
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?

Nein. Und die benutzte Codeseite entspricht den Einstellungen deines Systems (oder deines Benutzers, je nachdem).

Kann man die ändern?
(Also in Delphi, für ein Programm)

Frickeldrecktuxer_TM 14. Mai 2006 16:11

Re: Konsolenanwendung Zeichensatz
 
Zitat:

Zitat von Martin K
Kann man die ändern?
(Also in Delphi, für ein Programm)

Laut http://www.uwe-sieber.de/codepage_e.html mit CHCP. Eine passende Codepage sollte laut Google 1252 sein, sofern die in cmd.exe verfügbar ist. Falls nicht, weiß ich auch nicht, welche CP du da am besten nimmst.
Aber ist es denn wirklich so schlimm alle Vorkommen von WriteLN() durch CustomWriteLN() zu ersetzen und dann einfach folgende Funktion zu schreiben?
Delphi-Quellcode:
procedure CustomWriteLN(S: String);
var
  buf: String;
begin
  SetLength(buf, Length(S));
  CharToOEM(PChar(S), PChar(buf));
  WriteLN(buf);
end;

Martin K 14. Mai 2006 16:12

Re: Konsolenanwendung Zeichensatz
 
So, hab mir jetzt so was gebastelt:
Delphi-Quellcode:
procedure Write(const src: string);
var dst: string;
begin
  if src='' then
    WriteLn('')
  else
  begin
    SetLength(dst,Length(src));
    CharToOEM(PChar(src),PChar(dst));
    WriteLn(dst);
  end;
end;
Warum funzt das eigentlich net bei leeren Strings ?

Bei leeren Strings ist mein Programm immer abgestürzt, deshalb die IF-Abfrage.

DGL-luke 14. Mai 2006 19:03

Re: Konsolenanwendung Zeichensatz
 
ach ja... das Problem mit dem sofortigen schließen... Könnte es sein, dass nach dem Writeln einfach gleich das finale "end." kommt? Das macht nämlich genau das, was man von ihm erwartet. :zwinker:

Die Lösung verrat ich natürlich auch gleich: Ein einfaches "ReadLn" kehrt erst zurück, wenn du die Enter-Taste betätigst.

xaromz 14. Mai 2006 21:14

Re: Konsolenanwendung Zeichensatz
 
Hallo,
Zitat:

Zitat von Martin K
Warum funzt das eigentlich net bei leeren Strings ?

Bei leeren Strings ist mein Programm immer abgestürzt, deshalb die IF-Abfrage.

Weil der String "dst" mindestens ein Zeichen lang sein muss, sonst mag CharToOEM nicht. Steht leider auch nicht im PSDK.

Gruß
xaromz

implementation 19. Mär 2009 17:25

Re: Konsolenanwendung Zeichensatz
 
ich möchte in meinem Programm möglichst die Zeichen ╣║╗╝╚╔╩╦╠═╬ benutzen.
Da hilft aber auch CharToOem() nicht weiter.
Aber es scheint irgendwie möglich zu sein.
Weiß jemand wie?

mjustin 19. Mär 2009 19:16

Re: Konsolenanwendung Zeichensatz
 
Zitat:

Zitat von Frickeldrecktuxer_TM
die ASCII-Zeichen sind identisch mit den 128 ersten Unicode-Zeichen

Nicht direkt. Bei UTF-16 und UCS-2 ist jedes Unicodezeichen in (mindestens) zwei Bytes kodiert, bei UCS-4 und UTF-32 sogar in 4 - auch die Zeichen, die den ASCII Zeichen entsprechen, belegen also mehrere Bytes. Bei UTF-8 stimmt gibt es die Übereinstimmung mit ASCII bei der Kodierung der ersten 128 Zeichen. Weitere Unicode Zeichen benötigen in UTF-8 bis zu vier Bytes ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Seite 2 von 3     12 3      

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