Hey, ich will EIN einiziges Zeichen in C anhand der ASCII Tabelle ausgeben, um genau zu sein das Euro Zeichen aber wie geht das in C? Ich kenne die ASCII Tabelle und ich will diese nicht als Code ausgeben, sondern das einzelne Zeichen mittels printf ausgeben .. wie geht das? Achja: Man kann ja auch ASCII Zeichen über den Hexadezimalwert ausgeben aber wie geht das in C? Ich wüsste, wie das in C# und PHP geht aber in C kenne ich micht so gut aus. Danke schon einmal im voraus
Cler schrieb: > Ich kenne die ASCII Tabelle und ich will diese nicht als Code ausgeben, > sondern das einzelne Zeichen mittels printf ausgeben .. wie geht das? Ich kenne auch die ASCII-Tabelle, die hat aber gar kein €-Zeichen. Welche kennst du?
Hmm .. habe mich wohl doch geirrt aber wieso kann das Zeichen dann nicht in der Console dargestellt werden? Ist das einfach ein Darstullungsproblem? Die Frage bleibt trotzdem noch: Wie kann ich Zeichen aus der ASCII Tabelle mithilfe des Dezimal- oder des Hexadzimalwertes ausgeben?
Ansonsten gibt es z.B. putchar(). ein Leerzeichen könnte man z.B. ausgeben als:
1 | putchar( ); |
2 | putchar( ' ' ); |
3 | putchar( 32 ); |
4 | putchar( 0x20 ); |
Man kann auch mit der Escape Sequence \x innerhalb von Strings Hexadezimalwerte einfügen. Also etwa: printf("Hier ist ein Euro-Zeichen: \xA4"); Wobei zumindest nach dieser Codierung (http://de.wikipedia.org/wiki/ISO_8859-15) das €-Zeichen auf 0xA4 liegt. Wie es dann dargestellt wird liegt am Betriebsystem und dem eingestellten Zeichensatz.
ja, indem man eine oktale oder hexadezimale \...-Sequenz in den String einfügt. Steht in 99.9% aller C-Bücher hoffentlich... Ebenso wie in dem Post drüber :-)
:
Bearbeitet durch User
Cler schrieb: > geht das auch irgendwie mit dem printf Befehl? Lesen: sebi707 schrieb: > printf("Hier ist ein Euro-Zeichen: \xA4"); Allerdings musst Du berücksichtigen, wo Du Dein Euro-Zeichen ausgeben willst. Du schriebst was von "Konsole" -- meinst Du damit das Windows-Kommandozeilenfenster? Das verwendet normalerweise eine andere Zeichencodierung als beispielsweise Notepad, nämlich Codepage 850. Windows-Programme (wie Notepad etc.) verwenden hingegen Codepage 1252. Im Kommandozeilenfenster kann zwar die verwendete Codepage eingestellt* werden, aber sinnvolle Ergebnisse gibt es nur, wenn auch eine geeignete Schriftart verwendet wird. Die Pixel-Schrift, die standardmäßig verwendet wird, die kann nur für Codepage 850 verwendet werden. Sinnvoll sind hier "Lucida Console" oder "Consolas". *) Entweder per Win32-API SetConsoleOutputCP http://msdn.microsoft.com/en-us/library/windows/desktop/ms686036%28v=vs.85%29.aspx oder per Kommandozeilenbefehl mode con cp select=1252
Rufus Τ. Firefly schrieb: > das > Windows-Kommandozeilenfenster? Nichtantike Linuxe (BSD und OS X wahrscheinlich auch) sollten von Haus aus in Terminalfenster (und auch in reinem Textmodus) UTF8 sprechen und keine Problem mit der Darstellung von "Sonderzeichen" haben: printf("\u20AC");
Dennis schrieb: > 1. Frage: welchen ASCII-Code hat denn das EURO-Zeichen? Das lässt sich nicht so leicht beantworten, weil das Eurozeichen offiziell den Unicode hex 20AC hat. In vielen Fällen wird € jedoch auf das ASCII-Zeichen 128 gemappt, siehe beigefügte ASCII-Tabelle. Windows macht das auch, wenn der Font so alt ist, dass er garkein € enthält, wenn man chr(128) ausgibt, aber lustigerweise dann nicht, wenn € normal in einem text steht - vermutlich, weil, zumindest bei neueren Windowsen, im Text nicht ASCII 128, sonder Unicode 20AC steht. Ich würde es erst mal mit 128 probieren, wie man Unicode in C ausgibt weiss ich nicht. Georg
Tom schrieb: > (und auch in reinem Textmodus) Das allerdings wäre ... verwunderlich, wenn "reiner Textmodus" wirklich "reiner Textmodus" heißt. Der nämlich nutzt einen 8-Bit-Zeichensatz mit CP437, der im BIOS der Graphikkarte abgelegt ist. Zwar lässt der sich ändern, aber das ändert nichts an der "8-bit-ness", so daß halt nicht mehr als 256 unterschiedliche Glyphen dargestellt werden können.
Georg schrieb: > Dennis schrieb: >> 1. Frage: welchen ASCII-Code hat denn das EURO-Zeichen? > > Das lässt sich nicht so leicht beantworten, weil das Eurozeichen > offiziell den Unicode hex 20AC hat. In vielen Fällen wird € jedoch auf > das ASCII-Zeichen 128 gemappt, siehe beigefügte ASCII-Tabelle. Dies ist keine ASCII-Tabelle, und ein ASCII-Zeichen 128 gibt es auch nicht, da ASCII ein 7-Bit-Zeichensatz ist, somit geht es nur bis 127.
Georg schrieb: > Äusserst hilfreich. Aber korrekt. Es bringt nichts, wenn man irgendwelche Zeichencodierungen als "ASCII" bezeichnet, außer Verwirrung. Als 8-Bit-Zeichentabelle ist ISO8859-1 wohl die häufigste Variante, insbesondere in der Microsoft-Interpretation als Codepage 1252 ("ANSI"-Zeichensatz genannt).
Rufus Τ. Firefly schrieb: > Als 8-Bit-Zeichentabelle ist ISO8859-1 wohl die häufigste Variante, bzw. ISO-8859-15, das sich von ISO-8859-1 vor allem dadurch unterscheidet, daß es das Euro-Zeichen hat. Georg schrieb: > Rolf Magnus schrieb: >> Dies ist keine ASCII-Tabelle > > Äusserst hilfreich. Ich bin immer gerne bereit, jemandem bei der Erkenntnis zu helfen, daß er was falsches erzählt hat. ;-)
Rolf Magnus schrieb: > Ich bin immer gerne bereit, jemandem bei der Erkenntnis zu helfen, daß > er was falsches erzählt hat. ;-) Zitat Microsoft: "Der ISO-ANSI ASCII-Zeichensatz wird von Windows verwendet, jedoch es ist nicht identisch mit dem IBM PC-OEM ASCII-Zeichensatz, obwohl die unteren 128 Zeichen identisch sind. " Dein Einwand ist reine Klugscheisserei ("Klug" ist eigentlich ja nicht korrekt). Ich bin jedenfalls nicht so grössenwahnsinnig alles besser wissen zu wollen als MS und IBM. Aber wenn du dich dann besser fühlst... Meinetwegen kannst du dich ruhig für den GRÖPAZ halten. Georg
Georg schrieb: > Meinetwegen kannst du dich ruhig für den GRÖPAZ halten. Auch wenn es dir nicht passt: die Frage war nach ASCII und €-Zeichen. Da wird man doch wohl nnoch darauf hinweisen dürfen, daß ASCII-Zeichen nur bis 127 gehen und € nicht enthält. Mehr kann man dazu ehrlicherweise auch gar nicht sagen, solange der OP nicht verrät, womit er arbeitet. Windows? Welches? Mit welcher Codepage?
Georg schrieb: > Rolf Magnus schrieb: >> Ich bin immer gerne bereit, jemandem bei der Erkenntnis zu helfen, daß >> er was falsches erzählt hat. ;-) > > Zitat Microsoft: > "Der ISO-ANSI ASCII-Zeichensatz wird von Windows verwendet, jedoch es > ist nicht identisch mit dem IBM PC-OEM ASCII-Zeichensatz, obwohl die > unteren 128 Zeichen identisch sind. " ASCII ist eine Norm. Im Zweifelsfall zählt, was die sagt und nicht was irgendwer bei Mirosoft darüber denkt. Hier die orginal-Spezifikation: http://worldpowersystems.com/archives/codes/X3.4-1963/index.html Die meisten 8-Bit-Zeichensätze basieren auf ASCII, d.h. die untere Hälfte ist gleich wie bei ASCII. Das bedeutet aber nicht, daß die automatisch auch alle ASCII heißen. Siehe auch https://en.wikipedia.org/wiki/Extended_ASCII > Dein Einwand ist reine Klugscheisserei ("Klug" ist eigentlich ja nicht > korrekt). Ich bin jedenfalls nicht so grössenwahnsinnig alles besser > wissen zu wollen als MS und IBM. Aber wenn du dich dann besser fühlst... > > Meinetwegen kannst du dich ruhig für den GRÖPAZ halten. Warum kannst du nicht einfach akzeptieren, daß du was falsches geschrieben hast, statt persönlich zu werden, weil du keine Argumente hast?
Rolf Magnus schrieb: > ASCII ist eine Norm. Im Zweifelsfall zählt, was die sagt und nicht was > irgendwer bei Mirosoft darüber denkt. Hier die orginal-Spezifikation: > http://worldpowersystems.com/archives/codes/X3.4-1963/index.html Auch von mir ein kleiner Beitrag zur hier zuhauf stattfindenen Defäkation von Intelligenz: Es zählt bei einer Norm immer nur die neueste Ausgabe. ASA X3.4-1963 hingegen ist die älteste und wurde nacheinander abgelöst durch ASA X3.4-1965, USASI X3.4-1967, USASI X3.4-1968, ANSI X3.4-1977 und ANSI X3.4-1986. Die derzeit gültige Norm ist also ANSI X3.4-1986. Der Code nach dieser Norm enthält im Vergleich zur ursprünglichen Definition eine ganze Menge zusätzlicher Zeichen, aber immer noch kein Euro-Zeichen. Der TE wird also andere Code-Tabellen zu Rate ziehen müssen, am besten diejenige, die von dem von ihm genutzten (realen oder virtuellen) Ausgabegerät unterstützt wird :) Georg schrieb: > Zitat Microsoft: > "Der ISO-ANSI ASCII-Zeichensatz wird von Windows verwendet, jedoch es > ist nicht identisch mit dem IBM PC-OEM ASCII-Zeichensatz, obwohl die > unteren 128 Zeichen identisch sind. " Mal abgesehen von der üblen Grammatik, die MS hier an den Tag legt: Die Codepage 1252, um die es hier wohl geht, ist weder von der ISO noch vom ANSI genormt und (wie bereits mehrfach geschrieben) auch nicht mit dem ASCII gleichzusetzen.
:
Bearbeitet durch Moderator
Rolf Magnus schrieb: > Warum kannst du nicht einfach akzeptieren, daß du was falsches > geschrieben hast, statt persönlich zu werden Es geht überhaupt nicht um Persönliches, du kannst mich ruhig für so blöd halten wie du es brauchst, ich finde es nur unfair gegenüber dem TO: der wollte wissen wie er ein Eurozeichen ausgibt und keine Lehrstunde über die Geschichte der IT. Dazu hat dein Beitrag nicht nur nichts beigesteuert, sondern führt nur zu zusätzlicher Verwirrung. Und das bloss zur Selbst-Bebauchpinselung, wie furchtbar überlegen du doch dem TO an Fachwissen bist (und mir gegenüber natürlich auch, das bestreitet ja niemand). Vielleicht machst du dir ja mal klar, dass die von dir angeführte Norm aus der Mitte des vorigen Jahrhunderts wohl kaum was zum Eurozeichen zu sagen haben kann. Georg
Georg schrieb: > der wollte wissen wie er ein Eurozeichen ausgibt und keine Lehrstunde > über die Geschichte der IT. Ohne etwas über die Hintergründe zu erfahren, wäre er mit der Information nur eines Zeichencodes aber keinen Schritt weitergekommen, weil je nachdem womit und wohin das Zeichen "ausgegeben" wird, das völlig unterschiedliche Ergebnisse liefern kann. Die wichtige(!) Erkenntnis ist, daß je nach Ziel der Ausgabe völlig unterschiedliche Zeichencodierungssysteme verwendet werden - und daß man, um diese auseinanderhalten zu können, nicht plump von "ASCII" reden sollte.
Georg schrieb: > Rolf Magnus schrieb: >> Warum kannst du nicht einfach akzeptieren, daß du was falsches >> geschrieben hast, statt persönlich zu werden > > Es geht überhaupt nicht um Persönliches, du kannst mich ruhig für so > blöd halten wie du es brauchst, Ich halte dich nicht für blöd, sondern hab lediglich eine Falschaussage korrigiert, mehr nicht. Ich hab keine Ahnung, warum du da so einen Aufstand machst. Du nimmst das offenbar sehr persönlich. > ich finde es nur unfair gegenüber dem TO: der wollte wissen wie er ein > Eurozeichen ausgibt und keine Lehrstunde über die Geschichte der IT. Er wollte wissen, wie er das Eurozeichen "anhand der ASCII-Tabelle" ausgeben kann. Die ASCII-Tabelle enthält aber kein Euro-Zeichen. Genau das habe ich geschrieben. Nun gibt es je nach Zeichensatz durchaus unterschiedliche Positionen, an denen das Euro-Zeichen sein kann, also müßte man wissen, welchen Zeichensatz er tatsächlich hat. Das hast du ja auch schon geschrieben, nur hast du das halt auch ASCII genannt, und DAS ist es, was dann zur Verwirrung beiträgt. > Und das bloss zur Selbst-Bebauchpinselung, wie furchtbar überlegen du > doch dem TO an Fachwissen bist (und mir gegenüber natürlich auch, das > bestreitet ja niemand). Und das nennst du nicht persönlich. Fakt ist, daß du hier sehr wohl persönlich und beleidigend wirst. Daß du mir ständig irgendwelchen Unsinn unterstellst, ist auch in keinster Weise hilfreich. Wenn du an einer sachlichen Diskussion kein Interesse hast, sondern nur stänkern willst, bringt das nichts, also ist für mich die Diskussion hiermit beendet. > Vielleicht machst du dir ja mal klar, dass die von dir angeführte Norm > aus der Mitte des vorigen Jahrhunderts wohl kaum was zum Eurozeichen zu > sagen haben kann. Was mitunter auch zeigt, daß ASCII eben gar kein Euro-Zeichen enthalten kann.
Da ich eigentlich davon ausgegangen bin, dass das Euro Zeichen in der ASCII Tabelle ist, habe ich das auch so in der Überschrift geschrieben. Ich beschäftgie mich, wie oben auch geschrieben noch nicht sehr lange mit C. Derzeit benuttze ich die IDE von Orwell (Dev C++) und ich will das Euro Zeichen auf die cmd von Windows kriegen. Ich benutze Windows 7 aber wie man zu dieser Codepage kommt oder was das überhaupt ist, weiß ich nicht. Wie kann ich denn dann das € Zeichen auf die Konsole bringen oder geht das nicht?
Cler schrieb: > Wie kann ich denn dann das € Zeichen auf die Konsole bringen oder geht > das nicht? Doch. Sieh halt nach, welchen Code das Zeichen in der von der Konsole normalerweise verwendeten Codepage hat und gib den via printf oder was auch immer Dir gefällt aus. Wie ich bereits schrieb, ist die Codepage der "Eingabeaufforderung" (und beliebiger anderer Konsolfenster) normalerweise 850. Wenn Dein Konsolfenster nicht die standardmäßige Pixelbrocken-Schrift verwendet, sondern von Dir auf "Lucida Console" oder "Consolas" umgestellt ist, dann kannst Du mit der Win32-API-Funktion SetConsoleOutputCP die Codepage umstellen, sinnvollerweise auf 1252, denn das entspricht der Zeichencodierung, die die meisten Editoren unter Windows verwenden. Vorsicht auch hier, manche verwenden mittlerweile Unicode in Form von UTF-8, und das versteht das Konsolenfenster wiederum nicht. Wie auch immer, ob Du nun Codepages umstellst oder nicht, ein Zeichen anhand seines Zeichencodes kann man mit printf("Mein tolles Zeichen \xAB in der Konsole\n"); ausgeben, der Zeichencode wird hier hexadezimal angegeben (hier im Beispiel 0xAB, was das Euro-Zeichen in der von Dir schlussendlich genutzten Codepage ist, musst Du selber rausfinden. Das schaffst Du.). Auch die in C++ üblichen Streaming-Operatoren lassen sich so verwenden. cout << "Mein tolles Zeichen \xAB in der Konsole\n";
Ich habe ja schon im Internet geguckt und unter Windows scheint es wohl 0x80 zu sein aber das funktioniert nicht. Es wird wohl so ein C mit nem Strich nach unten links gezeigt aber ich will ja das wirkliche Euro Zeichen haben. Ich habe auch hier mal nachgeschaut aber ich sehe da kein Euro Zeichen. http://de.wikipedia.org/wiki/Codepage_850 Ich hätte ja nicht gedacht, dass das ganze so kompliziert ist ...
Ich habe auch nicht die Codepage umgestellt, jedenfalls nicht das wüsste. Ich habe Windows auch vor kurzem erst neuinstalliert, von daher müsste der Standard ja wohl noch aktiviert sein.
Cler schrieb: > Es wird wohl so ein C mit nem Strich nach unten links gezeigt Das ist das Zeichen, das erscheint, wenn 0x80 ausgegeben und CP850 verwendet wird (was, wie ich bereits mehrfach schrieb, in der Konsole unter Windows standardmäßig der Fall ist). Ein Ç. Um ein Euro-Zeichen ausgeben zu können, musst Du die Codepage umschalten. Das geht --wie ich bereits mehrfach geschrieben habe-- mit der Win32-API-Funktion SetConsoleOutputCP, setzt aber voraus, daß die in der Konsole verwendete Schriftart das Zeichen auch darstellen kann. Die Pixelschrift kann das nicht, Du musst also in den Eigenschaften des Konsolenfensters entweder "Lucida Console" oder "Consolas" einstellen. Nein, dafür gibt es keine API-Funktion, das musst Du von Hand machen.
Wenn es um die Kommandozeile geht, dann einfach Lucidia Console einstellen in den Eigenschaften der Kommandozeile (oder irgendeine andere, die den Euro kennt), und zusätzlich "chcp 1252" ausführen, damit der Euro erscheint (bzw. die 0x80 als Euro erkannt wird).
Ein paar Hinweise findest du auch hier: http://stackoverflow.com/questions/10882277/how-to-properly-print-utf8-characters-in-windows-console
Cler schrieb: > Ich habe auch nicht die Codepage umgestellt, jedenfalls nicht das > wüsste. Gerade das musst Du aber tun! Die Console - sprich Eingabeaufforderung - kann in der Standard-Einstellung überhaupt kein Euro-Zeichen ausgeben. > Ich habe Windows auch vor kurzem erst neuinstalliert, von daher > müsste der Standard ja wohl noch aktiviert sein. Ja, eben, der "Standard" für die Console ist ja genau die Krücke. Jetzt verstanden? Also ignoriere nicht die Hinweise, die Dir gegeben wurden, sondern wende sie an.
Um es gegebenenfalls permanent zu machen, in ...\Windows\System32\AUTOEXEC.NT eintragen:
1 | chcp ... |
Hat zumindest unter Windows 2000 noch funktioniert. PS: das betrifft nur cmd.exe, nicht das restliche System.
:
Bearbeitet durch User
Sinnvoller dürfte es sein, das im Programm zu machen. Wie das geht, habe ich schon so oft geschrieben, daß ich das jetzt nicht nochmal wiederhole. Bei neueren Windows-Versionen (ab "Vista") lässt sich sogar die verwendete Schriftart mit der API-Funktion SetCurrentConsoleFontEx einstellen. http://msdn.microsoft.com/en-us/library/ms686200%28v=VS.85%29.aspx enthält sogar ein Beispiel. In dem ist allerdings der Aufruf von wcscpy_s fehlerhaft, hier sollte statt
1 | wcscpy_s(cfi.FaceName, L"Consolas"); |
noch die Länge des Zielpuffers angegeben werden:
1 | wcscpy_s(cfi.FaceName, LF_FACESIZE, L"Consolas"); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.