mikrocontroller.net

Forum: Compiler & IDEs G++ Umlautausgabe bei Kompilation


Autor: Albert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder die von gcc.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
c:\temp>mode con cp

Status von Gerät CON:
---------------------
    Codepage:        850


c:\temp>type text.txt
õ÷³─Í▄▀Á

c:\temp>mode con cp select=1252

Status von Gerät CON:
---------------------
    Zeilen:          3000
    Spalten:         80
    Wiederholrate:   31
    Verzögerungszeit:1
    Codepage:        1252


c:\temp>type text.txt
äöüÄÖÜßµ

c:\temp>mode con cp select=1251

Status von Gerät CON:
---------------------
    Zeilen:          3000
    Spalten:         80
    Wiederholrate:   31
    Verzögerungszeit:1
    Codepage:        1251


c:\temp>type text.txt
дцьДЦЬЯµ


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.

Autor: eklige Tunke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
Fehler:  no match  für
^deutsch ^englsich ^wieder deutsch

Autor: Albert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Albert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag,

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

Schönen Abend

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.