Forum: Compiler & IDEs G++ Umlautausgabe bei Kompilation


von Albert (Gast)


Lesenswert?

Guten Abend!

Ich war gerade dabei mein Projekt zu übersetzen und führte ganz normal 
wieder make aus und ich hatte einen kleinen Syntaxfehler im Code, nagut 
dachte ich, den Fehler schnell ausbessern...und da fiel mir bei der 
Fehlerausgabe auf, dass keine Umlaute erkannt werden.
Compiler gab folgendes aus: Fehler: no match f"ur  usw., sollte wohl 
"für" heißen.
Ich muss dazu sagen, ich verwende cygwin + rxvt und innerhalb der 
Konsole werden Umlaute ganz normal angezeigt bzw. auch wenn ich einen 
Text mit printf oder cout (natürlich mit Umlauten) ausgebe, werden diese 
richtig dargestellt. Woran kann das liegen??
Habe im Netz auf die schnelle nichts gefunden...

MfG

von Klaus W. (mfgkw)


Lesenswert?

Ich nehme an, du hast Windows NT/2000/XP/..., und du redest von der
MSDOS-Eingabeaufforderung.

Dann hat man das Problem, daß Windows selbst Unicode verwendet, in der
Eingabeaufforderung aber ein anderer Zeichensatz verwendet wird (8-Bit,
bei DE-Einstellung glaube ich Latin9 bzw. ISO-8859--15).

In der Eingabeaufforderung kann man theoretisch daran etwas ändern
mit autoexec.bat (oder hieß die da autoexec.nt?) bzw. config.sys
(config.nt?).
Das betrifft aber dann alle Programme; d.h. ggf. funktionieren dann
andere nicht mehr.

Ich hatte vor ein paar Jahren mal damit gespielt, und es dann als
minder wichtig wieder bleiben lassen.

Jedenfalls liegt es an den unterschiedlichen Zeichensätzen, und
die Lösung wäre, die Kodierung der Konsole zu ändern.

von Rolf Magnus (Gast)


Lesenswert?

Oder die von gcc.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Dann hat man das Problem, daß Windows selbst Unicode verwendet, in der
> Eingabeaufforderung aber ein anderer Zeichensatz verwendet wird (8-Bit,
> bei DE-Einstellung glaube ich Latin9 bzw. ISO-8859--15).

Standardmäßig wird im Konsolenfenster ein Pixelfont verwendet, der nicht 
den ANSI-Zeichensatz (CP1252, ähnlich Latin1) darstellen kann, sondern 
nur CP437/850.

Konsolenausgaben vom OS erfolgen auch in dieser Zeichencodierung.

Die Zeichencodierung kann mit

  mode con cp select=1252

auf ANSI (ähnlich Latin1) umgestellt werden.

Das allein aber bringt nicht viel, da der verwendete Pixelfont nicht 
"passt".

Wird anstelle des Pixelfonts eine TrueType-Schriftart eingestellt 
(üblicherweise wird "Lucida Console" angeboten, mit einem Trick lässt 
sich auch "Consolas" nutzen), dann wird das gewünschte Verhalten 
erzielt.


Einfacher Test:

Mit einem Windows-Editor (Notepad) wird eine Textdatei erzeugt, die 
Umlaute enthält. Diese werden automatisch in ANSI/CP1252-Codierung 
gespeichert (wenn man Notepad nicht explizit instruiert, Unicode zu 
verwenden).

Gibt man diese Datei im Konsolenfenster aus, dann erhält man je nach 
eingestellter Codierung folgendes:
1
c:\temp>mode con cp
2
3
Status von Gerät CON:
4
---------------------
5
    Codepage:        850
6
7
8
c:\temp>type text.txt
9
õ÷³─Í▄▀Á
10
11
c:\temp>mode con cp select=1252
12
13
Status von Gerät CON:
14
---------------------
15
    Zeilen:          3000
16
    Spalten:         80
17
    Wiederholrate:   31
18
    Verzögerungszeit:1
19
    Codepage:        1252
20
21
22
c:\temp>type text.txt
23
äöüÄÖÜßµ
24
25
c:\temp>mode con cp select=1251
26
27
Status von Gerät CON:
28
---------------------
29
    Zeilen:          3000
30
    Spalten:         80
31
    Wiederholrate:   31
32
    Verzögerungszeit:1
33
    Codepage:        1251
34
35
36
c:\temp>type text.txt
37
дцьДЦЬЯµ


Klaus Wachtler schrieb:
> Jedenfalls liegt es an den unterschiedlichen Zeichensätzen, und
> die Lösung wäre, die Kodierung der Konsole zu ändern.

Zusammengefasst: Pixelfont systemweit für Konsolfenster deaktivieren, 
für Compilerdurchläufe die Codepage verwenden, in der Quelltexte 
verfasst sind - das ist CP1252.

von eklige Tunke (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Ich nehme an, du hast Windows NT/2000/XP/..., und du redest von der
> MSDOS-Eingabeaufforderung.
Ich würde sagen Nein, denn er schreibt ja, dass er cygwin und rxvt 
nutzt, also nutzt er wohl auch die cygwin-Shell bzw. rxvt welches er mit 
cygwin installiert hat.

@ Albert
Keinen Kopf machen, noch 10 Jahre (oder länger) und das 
Unicode-Latin-Zeichensatz-Problem ist gelöst, aber dann wird es andere 
Probleme geben.

Mal eine Anmerkung/Frage, der Compiler gibt wirklich so einen 
DEnglisch-Mist aus?
1
Fehler:  no match  für
2
^deutsch ^englsich ^wieder deutsch

von Albert (Gast)


Lesenswert?

@eklige Tunke

Ja, der Compiler gibt es genau so aus.
Ich habe das "Problem" einfach behoben, indem ich in der cygwin.bat
set LANG=en_US.ISO8859-1 eingetragen habe. Jetzt ist alles in Englisch, 
so wie ich es haben will.

Schönen Abend

von Albert (Gast)


Lesenswert?

Nachtrag,

natürlich meinte ich: set LANG=en_US.ISO-8859-1

Schönen Abend

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
Noch kein Account? Hier anmelden.