![]() |
Konsolenanwendung Zeichensatz
Hi,
hab mir mal mit Delphi eine Konsolenanwendung {$APPTYPE CONSOLE} gemacht. Leider gibt es hier Probleme bei der Formatierung von Strings über WriteLn(). Anscheinend wird hier nicht der "normale" ASCII-Zeichensatz verwendet, sondern ein anderer. z.B. hat ein ä im normalen Zeichensatz den Index #228, bei der Konsole erhalt ich ein ä über #132. Gibt es evtl. eine einfache Umwadlung des Zeichensatzes? |
Re: Konsolenanwendung Zeichensatz
Zitat:
![]() ![]() Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen? Zitat:
Der ASCII-Zeichensatz besteht doch aus 256 Zeichen und da sind auch Umlaute mit dabei... Oder liege ich jetzt vollkommen daneben? :gruebel: |
Re: Konsolenanwendung Zeichensatz
Zitat:
2.) Im orginal (E)ASCII sind tatsächlich keine Umlaute enthalten. Es gibt aber Codeseiten, mit denen man Umlaute reinmappen kann. Apropos: wenn die Konsole sofort wieder geschlossen wird, riecht das eher nach einer Exception. Mglw. rufst du obige Funktionen nicht korrekt auf? |
Re: Konsolenanwendung Zeichensatz
Zitat:
Zitat:
Delphi-Quellcode:
Ist da was falsch?
var s1,s2: string;
{...} s1 := 'ä'; CharToOEM( PChar(s1), PChar(s2)); WriteLn(s2); Habe diese Funktionen noch nie benutzt... |
Re: Konsolenanwendung Zeichensatz
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
//Edit: dieses elende quote-Zeug's... Ich hasse es! |
Re: Konsolenanwendung Zeichensatz
Okay, so geht's:
Delphi-Quellcode:
Aber ich würde es gerne mit der anderen Methode machen, dass die Strings im Quellcode direkt im DOS-Zeichensatz formatiert sind.
{...}
s1 := 'ä'; SetLength(s2, Length(s1)); CharToOEM( PChar(s1), PChar(s2)); WriteLn(s2); Also wenn ich eingebe:
Delphi-Quellcode:
...dann soll das auch so in der Ausgabe meiner Konsole richtig stehen...
WriteLn('ä');
|
Re: Konsolenanwendung Zeichensatz
SetLength benutzen.
Sorry, war kein roter Kasten da. |
Re: Konsolenanwendung Zeichensatz
Zitat:
Etwas unpraktikabel vielleicht, aber allemal eine Variante. |
Re: Konsolenanwendung Zeichensatz
Hm, ja das ist eine Möglichkeit, finde ich aber nicht sehr gut.
Ich hätte es gerne so: Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
(Also in Delphi, für ein Programm) |
Re: Konsolenanwendung Zeichensatz
Zitat:
![]() 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; |
Re: Konsolenanwendung Zeichensatz
So, hab mir jetzt so was gebastelt:
Delphi-Quellcode:
Warum funzt das eigentlich net bei leeren Strings ?
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; Bei leeren Strings ist mein Programm immer abgestürzt, deshalb die IF-Abfrage. |
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. |
Re: Konsolenanwendung Zeichensatz
Hallo,
Zitat:
Gruß xaromz |
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? |
Re: Konsolenanwendung Zeichensatz
Zitat:
|
Re: Konsolenanwendung Zeichensatz
Zitat:
Dann mußt Du "nur" die richtigen Codes ausgeben: write(#$C8) für ╚ Wenn Du z.B. ein TMemo nutzen willst, dann solltest Du den Font Terminal verwenden. Gruß K-H |
Re: Konsolenanwendung Zeichensatz
konsole, ja
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz