Unicode/ASCII in C mit printf() in der Konsole darstellen.
Servus, ich möchte mit der printf()-Funktion Unicode/ASCII in der Konsole darstellen (Programmiersprache: C). ASCII wird problemlos dargestellt, bei Unicode werden fehlerhafte Zeichen dargestellt bzw. nicht die Zeichen, die ich möchte.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("AE: \x8E\n");
printf("OE: \x99\n");
printf("UE: \x9A\n");
printf("SS: \xE1\n");
char h_doubleline = '\u2550';
char v_doubleline = '\u2551';
printf("Doppelte horizontale Linie: %c\n", h_doubleline);
printf("Doppelte vertikale Linie: %c\n", v_doubleline);
int input = getchar(); //Eingabeanfrage, damit das Programm nicht beendet wird.
return 0;
}
Wie kann ich Unicode richtig einfügen, sodass die richtigen Zeichen angezeigt werden? MfG.
2 Antworten
Ich nehme an, du nutzt Windows. Da gibt es leider kein Unicode in der Konsole. Stattdessen wird eine Codepage verwendet (im deutschen Raum üblicherweise CP850).
\u2251 wäre da z.B. \xBA
Für mehr Details Google nach deiner Codepage durchsuchen (die aktive Codepage lässt sich übrigens im cmd mit 'chcp' auslesen).
Problem hier ist: Es funktioniert dann nur auf PCs mit der gleichen Codepage sicher. Es gibt in der Win-API eine Funktion um die Codepage (fix gegooglet, die sieht vielversprechend aus: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686036%28v=vs.85%29.aspx) zu ändern, falls du auf anderen Rechnern sicher sein willst.
Wenn du sicher gehen willst: Die ersten 127 Zeichen vom ASCII Code sind immer garantiert.
Mit der Funktion 'int system(const char *cmd)' (aus <stdlib.h>) kannst du einen Shell Command absetzen. Das ist sicher nicht die schönste Lösung, aber ehrlich gesagt die einzige die mir spontan einfällt.
Dann könntest du z.B.
system("chcp 850");
ausführen um die Codepage zu ändern.
Danke! Das reicht mir für den Anfang völlig. ;)
Angezeigt wird (Konsole):
AE: Ä
OE: Ö
UE: Ü
SS: ß
Doppelte horizontale Linie: É
Doppelte vertikale Linie: æ
Vielen Dank für deine Antwort!
Ist es möglich in C mithilfe einer Funktion Befehle in der Konsole auszuführen? Also, dass im Grunde mein C-Programm als erstes den Befehl "chcp 850" im CMD ausführt, sodass die Codepage auf 850 geändert wird? Oder mit "chcp" überprüft, welche Codepage aktiv ist und sie nur bei Bedarf ändert?
MfG.