Laden...

ASCII Zeichen in Console richtig darstellen

Erstellt von GoldenBoy vor 8 Jahren Letzter Beitrag vor 8 Jahren 8.596 Views
GoldenBoy Themenstarter:in
19 Beiträge seit 2015
vor 8 Jahren
ASCII Zeichen in Console richtig darstellen

Hi Zusammen

ich hab mit folgendem Code ASCII Zeichen dargestellt.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zumtesten
{
    class Program
    {
        static void Main(string[] args)
        {
            char asciicode = ' ';

            for (int i = 0; i <= 255; i++)
            {
                asciicode = Convert.ToChar(i);
                Console.WriteLine("{0} = {1}",i , asciicode);
            }

        }
    }
}

Leider hab ich viele Zeichen nicht in der Liste wie z.B. hier gezeigt. (by the Way, wie kann man das so schön in Reih und Glied in der Console tabellarisch ausgeben?)
(siehe Anhang)

Ich möchte mich noch etwas länger mit Consolen-Anwendungen aufhalten um mein Wissen der Basics zu vertiefen. Dazu wollte ich etwas "Grafik" benutzen wie in den guten alten DOS-Zeiten und auch solche "Fenster/Menüs" zusammen schustern. Leider ohne entsprechende ASCII Zeichen schwer.

Liegts am Code das er mir nicht die Zeichen einstellt oder evtl. an irgendwelchen Optionen im Compiler?

Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo GoldenBoy,

Liegts am Code das er mir nicht die Zeichen einstellt

An der Kodierung. Probiere sie durch und schau dir das Ergebnis an.


Console.OutputEncoding = Encoding.UTF8;

for (int i = 0; i < 255; i += 8)
{
	for (int j = 0; j < 8; ++j)
	{
		Console.Write("{0:000} {1}{2}", i + j, (char)(i + j), j < 8 ? "\t" : "");
	}

	Console.WriteLine();
}

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

GoldenBoy Themenstarter:in
19 Beiträge seit 2015
vor 8 Jahren

hi gfoidl dank dir für die schnelle Antwort. Leider werden zwar jetzt andere Zeichen angezeigt aber immer noch nicht die, die ich brauche. Ich dachte immer das wär auf jedem Computer gleich...

Ich hab das aktuelle Bild mal angehängt.

Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

4.939 Beiträge seit 2008
vor 8 Jahren

Schau dir unter Wichtige Zeichensatztabellen mal die verschiedenen Codepages an.
Bedenke, daß die Standard-Codepage in der Konsole 850 ist. Wenn du diese umstellen möchtest, dann mußt du dafür z.B. den DOS-Befehl "chcp" benutzen (um also auf 437 umzustellen: "chcp 437").

Es gab aber schon andere Forenbeiträge hierzu, z.B. Umlauten korrekt in der Konsole ausgeben

GoldenBoy Themenstarter:in
19 Beiträge seit 2015
vor 8 Jahren

und wie benutze ich chcp 437 in C# in der Console?

Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo GoldenBoy,

hast du dir den verlinkten Beitrag durchgelesen? Th69 hat diesen nicht umsonst gepostet.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

GoldenBoy Themenstarter:in
19 Beiträge seit 2015
vor 8 Jahren

Ja hab ich. Habs mit Console.OutputEncoding = Encoding.verschiedene Werte und Console.OutputEncoding = Encoding.GetEncoding(437); probiert, leider ohne Erfolg.

Also meinst Du mit "richtig lesen" ich muss über einen array das Ganze übersetzen lassen also sein Codekonstrukt komplett verwenden um überhaupt den ascii code zu verwenden der eigentlich standard auf meinem system ist?

Ich hab eben mal im notepad alt+178 probiert, hier funktioniert es und wird richtig angezeigt.

Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo GoldenBoy,

ich meinte eher das mit der Codepage wie herbivore im anderen Beitrag geschrieben hat.

Aber ich denke wir bewegen uns in eine Richtung die du gar nicht willst. Dir gehts doch um

Dazu wollte ich etwas "Grafik" benutzen wie in den guten alten DOS-Zeiten und auch solche "Fenster/Menüs" zusammen schustern. Leider ohne entsprechende ASCII Zeichen schwer.

Die benötigten Zeichen kannst du dir z.B. auch von der Windows-Zeichentabelle kopieren und dann z.B. wie folgt verwenden:

Leider geht hier im Forum beim Posten die Zeichen verloren, aber siehe angehängtes Bild wie es im Code-Editor aussieht.


	class Program
	{
		private static char[] _borderElements = "ý
$,4<".ToCharArray();

		static void Main(string[] args)
		{
			Write(2);
			Write(new string(_borderElements[0], 58));
			Write(3);
			Console.WriteLine();

			Write(1);
			Write("{0}{1}{0}", new string(' ', 24), "Hallo :-) ");
			Write(1);
			Console.WriteLine();

			Write(6);
			Write(new string(_borderElements[0], 58));
			Write(7);
			Console.WriteLine();

			Write(4);
			Write(new string(_borderElements[0], 58));
			Write(5);
			Console.WriteLine();

			Console.WriteLine("\nEnd.");
			Console.ReadKey();
		}

		private static void Write(int index)
		{
			Console.Write(_borderElements[index]);
		}

		private static void Write(char c)
		{
			Console.Write(c);
		}

		private static void Write(string s)
		{
			Console.Write(s);
		}

		private static void Write(string format, params object[] arg)
		{
			Console.Write(format, arg);
		}
	}

Ohne dass sonst etwas eingestellt od. angepasst wird erzeugt das dann die richtigen Rahmen. Ich hab bewusst ein paar Hilfsfunktionen definiert, damit es dann einfacher wird zum Coden, sonst wird bei "ASCII-Menüs" recht unübersichtlich.

guten alten DOS-Zeiten und auch solche "Fenster/Menüs" zusammen schustern

Diese Benutzerschnittstellen werden als TUI (textual user interface) bezeichnet. Da gibt es glatt noch Bibliotheken die verwendet werden können:
Turbo Vision resurrected - for C# and with XAML now
TUI - a Text User Interface Windows Library for .net

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.003 Beiträge seit 2006
vor 8 Jahren


>

Wie geil ist das denn...danke für den Link!

@GoldenBoy,

Dir fehlen auch ein bisschen die Grundlagen, scheint's.
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

GoldenBoy Themenstarter:in
19 Beiträge seit 2015
vor 8 Jahren

Moin, Moin

na da geht mir doch das Herz auf, vielen Dank gfoidl für den sehr ausführlichen Beitrag. Ich hab zwar mit deinem Codebeispiel keinen perfekten Rahmen hinbekommen, obwohl ich die Zeichen richtig ersetzt habe, aber das wird schon. Ich will als Anfänger die Geduld der Pros hier nicht groß überstrapazieren. 😄
Ich bin aktuell noch mit Klassen/Methoden beschäftigt und versuche dieses Wissen zu festigen. Mein Programmcode ging bis dato nie über 100 Zeilen groß hinaus. Vielleicht ist ja die TUI Geschichte ein guter Ansatz dafür...

Ich werd mich da wo noch reinfitzen müssen, ganz so einfach wie ich mir das gedacht habe ist es wohl dann doch nicht.

@LaTino
Dank dir für den Link. Mein Englisch ist jetzt nicht sooo dufte aber ich werd mich mal durchquälen.
Wie gesagt ich ging davon aus das er in der Consolenanwendungen die selbe Formatierung verwendet wie auch unter Dos. Iso, Utf sind mir durchaus bekannt. 😃

Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.