ubuntuusers.de

wprintf() Fragezeichen statt umlaute aus C++ g++

Status: Ungelöst | Ubuntu-Version: Ubuntu
Antworten |

T-Silver

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Cherio, ich habe folgendes Programm geschrieben:

#include <stdio.h>
#include <wchar.h>

int main(void)
{
wprintf(L"%lc", L'ä');
}

Leider wird nach dem kompilieren nur ein Fragezeichen und kein
ä ausgegeben. Wenn ich ein a anstatt eines ä eintrage wird
allerdings ein a ausgegeben. Woran liegt das? Die Bibliothek
wchar.h ist auf meinem Rechner vorhanden.

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Hi,
wahrscheinlich liegt deine Quellcode in einem anderen Zeichensatzformat vor, als das Programm später versucht die Ausgabe zu erzeugen.
Schau mal auf der Seite zu locale vorbei 😉

T-Silver

(Themenstarter)

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Danke für die Antwort aber deine Fromulation und die angegebene Seite verstehe ich im Moment überhaupt nicht. Kannst du mir vielleicht eine Übersicht geben um was es da geht?

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Hi,
sorry für meine knappe Ausdrucksweise 😳
In der Regel kann man im Editor einstellen, in welchem Zeichensatz neue Dateien gespeichert werden sollen.
Im gedit zum Beispiel (Anwendungen → Zubehör → Texteditor) gibt es im "Speichern Unter" Menü eine Zeile mit "Zeichenkodierung:", und da steht wahrscheinlich was von wegen UTF-8 drin.
Das C-Programm versucht jetzt dieses Zeichen aber in der Standard-ASCII-Kodierung darzustellen und scheitert. Dem kannst du Abhilfe schaffen, in dem du entweder deine Dateien nicht in UTF-8 Kodierung speicherst, oder dem Programm mitteilst welche Kodierung es verwenden soll. Die zweite Variante wäre wahrscheinlich die Bessere, da du dann schließlich über einen größeren Zeichensatz verfügst. 😉

Die Auswahl des Zeichensatzes im C-Programm wird auf der Seite, die ich oben verlinkt habe angegeben. Kurz gesagt klappt es in etwa so, dass man mit "setlocale" die Variablen, die die lokaliesierung betreffen setzen kann. Der erste Parameter gibt die Variable an, und der zweite den Wert, auf den man ihn setzen möchte. Also zum Beispiel setlocale( LC_CTYPE, "de_DE.UTF-8" ) um die Einstellungen für die Wide-Character Funktionen auf deutsch mit UTF-8 Kodierung um zu stellen.
Gibt man einen leeren String an, so wird die gesetzte Umgebungsvariable verwendet.

Dein Programm sähe dann so aus:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void)
{
	setlocale(LC_ALL, "");
	wprintf(L"%lc", L'ä');
}

Ich hoffe das hilft dir ein wenig weiter. 😉

T-Silver

(Themenstarter)

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Vielen Dank, ich habe die Antwort noch nicht ausprobiert aber sie hört sich sehr nützlich an. Wenn ich es korrigiert habe schreibe ich es in diesen Post.

Antworten |