[ncurses] Probleme mit Umlauten und ein paar Sonderzeichen

root1992

root1992

von IT-Lehrern besessen
Hi

Ich weiß nicht ob es jetzt an C++ und ncurses oder am System liegt, ich habs mal hier rein, falls ein MOD mein, es gehört wo anders hin, bitte verschieben, danke :)

Mein System:
Ubuntu
UTF8 (habs versucht auf ISO umzustellen aber funst ned so außerdem sollte es mit UTF8 funktionieren, da es ja die "Zukunft" ist (bzw sein sollte) )
sonst müsste alles aktuell sein (g++, ...)

Mein Problem:
Z1={Ä;Ü;Ö;ä;ü;ö;ß}
Z2={§;°;´¹;²;³;¼;½}

Z1 und Z2 werden nicht richtig dargestellt (printw("%c");) und was komisch ist ich hab mir schnell ein Programm geschrieben:
Code:
#include <iostream>
#include <ncurses.h>
using namespace std;
int main(){
initscr();
        noecho();
        keypad(stdscr,TRUE);
	int a=getch();
endwin();
cout << "\neingabe: "<<a <<endl;;
return 0;
}

bei Z1 bekomme ich immer 195 (a=195) und bei Z2 194 zurück.
Also immer diese zwei Werte, egal welches Zeichen entweder 195 oder 194.

Evtl sind noch andere Zeichen betroffen.

Vielen Dank

//edit: ich habs jetzt auch mal mit ncursesw versucht aber ist gleich ich werde es mal an nem anderen Rechner (FreeBSD) testen.
 
Zuletzt bearbeitet:
Hi root1992! ^^

Ich hab erstmal dein Programm von oben abgeändert:

Code:
#include <iostream>
#include <ncurses.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
int main(){
setlocale (LC_ALL, "de_DE");
   int c;

   while( (c = getchar()) !='.')
   {
	cout << "\neingabe: "<<c <<endl;;
   }
return 0;
}

Damit wird aus der Ausgabe 195 für die Umlaute 195 + 164 (ä), 182 (ö) bzw. 188 (ü) (die 10 ist Return), d.h. das die 3 Umlaute 2 Codes ausgeben. Vorsicht, nun beginnt der verrückte Teil: Daraufhin hab ich mal so aus Interesse in mein Eterm, das anscheinend meine dt. Locales-Einstellungen ignoriert ä, ö und ü eingegeben und die ausgegebenen Zeichen mit den Zeichen, die den Codes aus obigen Programm in der ASCII-Tabelle (http://www.asphelper.de/referenz/ASCIIANSI.asp) entsprechen, verglichen und siehe da, sie sind identisch!

Kurzfassung:

Ausgabe des Programms: 195 + 164 = ä; 195 + 182 = ö; 195 + 188 = ü

Entsprechungen dafür in der ASCII-Tabelle:
195 = "Grossbuchstabe A tilde, EBCDIC-C" = Ã
164 = "Allgemeines Währungszeichen, EBCDIC-u" = ¤
182 = "Paragraphen-Zeichen, pilcrow sign" = ¶
188 = "Ein Viertel (Viertel), vulgar fraction one quarter" = ¼

Ausgabe in der Konsole wenn ich (man) äöü drückt: äöü

Die Lösung dafür könnte sein, dass man im Skript einfach überprüft, wenn 195 zurückgegeben wird, ob ein zweiter Code übermittelt wird.

Ich hoffe, dass meine verrückte, aber irgendwie logische Theorie jemand versteht.

Grüße,
patlkli!
 
So bei mir ist es denke ich genauso. getch() macht das selbe.

Ncurses zeigt auch keine Umlaute an :(
z.B. wenn ich den Wert von getch() anzeigen lass (auch bei beiden) zeigt er nichts an.
 
Zuletzt bearbeitet:
Also, ich hab nun mal in meiner KDE-Konsole die Kodierung "Westeuropäisch (ISO-8859-15) eingestellt und dann dieses Programm hier verwendet:

Code:
#include <iostream>
#include <ncurses.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
int main(){
setlocale (LC_ALL, "de_DE"); // z.Zt. vll. noch nützlich
   int c;
  c = getchar();
  while ( (c = getchar()) != EOF )
  {
	if (c == 195)
	{
		if (c == 164)
			putchar(228);
		if (c == 182)
			putchar(246);
		if (c == 188)
			putchar(252);
	}
	else
	{
		putchar(c);
	}
  }
  putchar(c);
return 0;
}

edit: Hmm, nu geht aber alles... Sonderzeichen etc. auch, ich meld mich später nochmal
 
Zuletzt bearbeitet:

Ähnliche Themen

Aufgabe in C

übungsprogramm geht nicht!! veraltete Konvertierung von Zeichenkettenkonstante in »c

NetBeans für C++

[C++] Socket Probleme mit Adresse...

Umlaute und so umbenennen... - ntfs probleme?

Zurück
Oben