AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konsolenanwendung Zeichensatz

Ein Thema von Martin K · begonnen am 14. Mai 2006 · letzter Beitrag vom 22. Mär 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 14:43
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#2

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:06
Zitat von Martin K:
Anscheinend wird hier nicht der "normale" ASCII-Zeichensatz verwendet, sondern ein anderer.
Stimmt, du verwendest den ANSI-Verschnitt und möchtest deine Strings vor der Ausgabe in einen weiteren proprietären Zeichensatz umwandeln, der deiner Codepage entspricht: MSDN-Library durchsuchenOemToChar und MSDN-Library durchsuchenCharToOem

Zitat von Martin K:
z.B. hat ein ä im normalen Zeichensatz den Index #228, bei der Konsole erhalt ich ein ä über #132.
ASCII kennt keine Umlaute.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:16
Zitat von Frickeldrecktuxer_TM:
Zitat von Martin K:
Anscheinend wird hier nicht der "normale" ASCII-Zeichensatz verwendet, sondern ein anderer.
Stimmt, du verwendest den ANSI-Verschnitt und möchtest deine Strings vor der Ausgabe in einen weiteren proprietären Zeichensatz umwandeln, der deiner Codepage entspricht: MSDN-Library durchsuchenOemToChar und MSDN-Library durchsuchenCharToOem
Hm, wenn ich diese beiden Funktionen verwende, wird meine Konsole gleich nach dem Ausfüren wieder beendet.
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?

Zitat von Frickeldrecktuxer_TM:
Zitat von Martin K:
z.B. hat ein ä im normalen Zeichensatz den Index #228, bei der Konsole erhalt ich ein ä über #132.
ASCII kennt keine Umlaute.
Hä? Seit wann denn das ???
Der ASCII-Zeichensatz besteht doch aus 256 Zeichen und da sind auch Umlaute mit dabei...
Oder liege ich jetzt vollkommen daneben?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:22
Zitat von Martin K:
Hä? Seit wann denn das ???
Der ASCII-Zeichensatz besteht doch aus 256 Zeichen und da sind auch Umlaute mit dabei...
Oder liege ich jetzt vollkommen daneben?
1.) ASCII kennt nur 128 Zeichen. Der 256 Zeichen-Satz ist EASCII!
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?
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:29
Zitat von Olli:
1.) ASCII kennt nur 128 Zeichen. Der 256 Zeichen-Satz ist EASCII!
Das wusste ich noch gar nicht...

Zitat von Olli:
Apropos: wenn die Konsole sofort wieder geschlossen wird, riecht das eher nach einer Exception. Mglw. rufst du obige Funktionen nicht korrekt auf?
Ich rufe sie so auf:
Delphi-Quellcode:
var s1,s2: string;

{...}
  s1 := 'ä';
  CharToOEM( PChar(s1), PChar(s2));
  WriteLn(s2);
Ist da was falsch?
Habe diese Funktionen noch nie benutzt...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#6

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:31
Zitat von Martin K:
Hm, wenn ich diese beiden Funktionen verwende, wird meine Konsole gleich nach dem Ausfüren wieder beendet.
Gibt es keine Fehlermeldung oder ähnliches? Wie wendest du denn die Funktionen an?

Zitat von Martin K:
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?
Bei String-Konstanten würde es sich anbieten, den String im passenden Zeichensatz in den Quellcode zu legen, sofern der DCC das mitmacht. Ansonsten weiß ich nicht, ob es eine ANSI-kompatible Codepage für DOS (und somit auch cmd.exe) gibt.

Zitat von Martin K:
Zitat von Frickeldrecktuxer_TM:
ASCII kennt keine Umlaute.
Hä? Seit wann denn das ???
Seit Anbeginn der Zeit, ähh, seit es ASCII gibt

Zitat von Martin K:
Der ASCII-Zeichensatz besteht doch aus 256 Zeichen und da sind auch Umlaute mit dabei...
Oder liege ich jetzt vollkommen daneben?
ASCII sind 128 Zeichen. Welche das sind, kannst du in jeder zweitklassigen ASCII-Tabelle nachschlagen, die bei 0x7F aufhört, oder in einer Unicode-Referenz, falls du eine hast, denn die ASCII-Zeichen sind identisch mit den 128 ersten Unicode-Zeichen. Unter DOS hat man für 8bittige Zeichen Codepages eingeführt, nach Bedarf an diakritischen Zeichen (Akzente, Umlaute und was sonst noch kreucht und fleucht). Unter Windows dann eben ANSI (mittlerweile geht der Trend aber wohl auch unter Windows in Richtung Unicode, zumindest beim Dateisystem). Mit ASCII in Reinform kommst du normalerweise seit 20 Jahren nicht mehr in Berührung.
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#7

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:33
Zitat von Martin K:
Ist da was falsch?
Ja. Beide Funktionen verlangen, daß der Zielpuffer groß genug ist. Dein s2 hat aber die Länge 0 (Null, nicht O), weil du die Variable zuvor noch nicht gebraucht hast. Ein passendes SetLength() auf den String sollte für Abhilfe sorgen, denn das allokiert hinreichend viel Speicher im String.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:34
Zitat von Frickeldrecktuxer_TM:
Zitat von Martin K:
Kann man denn nicht allgemein, irgendwo am Anfang bei der Deklaration den Zeichensatz eines Strings festlegen?
Bei String-Konstanten würde es sich anbieten, den String im passenden Zeichensatz in den Quellcode zu legen, sofern der DCC das mitmacht. Ansonsten weiß ich nicht, ob es eine ANSI-kompatible Codepage für DOS (und somit auch cmd.exe) gibt.
Und wie geht das?

//Edit:
dieses elende quote-Zeug's... Ich hasse es!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:42
Okay, so geht's:
Delphi-Quellcode:
{...}
  s1 := 'ä';
  SetLength(s2, Length(s1));
  CharToOEM( PChar(s1), PChar(s2));
  WriteLn(s2);
Aber ich würde es gerne mit der anderen Methode machen, dass die Strings im Quellcode direkt im DOS-Zeichensatz formatiert sind.
Also wenn ich eingebe:
  WriteLn('ä'); ...dann soll das auch so in der Ausgabe meiner Konsole richtig stehen...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: Konsolenanwendung Zeichensatz

  Alt 14. Mai 2006, 15:42
SetLength benutzen.

Sorry, war kein roter Kasten da.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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