# Ö, Ü, Ä, im C++ Programm



## Bastih84 (26. August 2005)

Ist es möglich, dass ich auch Ö, Ü, Ä, mit meinem C++ Programm ausgebe Ich habe ein Parser geschrieben, funktioniert auch wunderbar, bis auf die Umlaute ö usw., hier gibt er nur wirres Zeug aus, wenn er sowas ausliest, ich hoffe ihr könnt mir wiedermal helfen

Danke schonmal


----------



## deepthroat (26. August 2005)

Also bei mir funktioniert das auch mit Umlauten wunderbar (OS: Linux, GCC 4.0.1). Welchen Compiler benutzt du denn, und welches Betriebssystem?

Hast du Beispielcode der nicht funktioniert?


----------



## Tobias K. (26. August 2005)

moin


Für Umlaute würde ich mir einfach die entsprechnden Werte aus der Ascii Tabelle holen, und damit arbeiten.


mfg
umbrasaxum


----------



## deepthroat (26. August 2005)

Hi.

In ASCII gibt es aber keine Umlaute. Es kommt halt drauf an was für eine Codepage geladen ist (in DOS/DOS Fenstern?). Wer benutzt denn heut noch ASCII - meistens ist das doch ISO-8859-x.

Dann ist die Frage welche Kodierung der Eingabe-Kanal und welche der Ausgabe-Kanal verwendet. Unter Umständen muß man die Zeichen dann konvertieren.


----------



## Sir_Kraebbchen (26. August 2005)

http://www.c-plusplus.de/forum/viewtopic-var-p-is-284402.html


----------



## Tobias K. (26. August 2005)

moin




> In ASCII gibt es aber keine Umlaute.


129, 132, 148. Damit sollte sich noch gut arbeiten lassen.



> Wer benutzt denn heut noch ASCII


Ich denke das sind schon noch einige.


mfg
umbrasaxum


----------



## deepthroat (26. August 2005)

Naja, also ASCII sind nur 7 Bits. D.h. 129, 132, 148 gibt es nicht im ASCII Code. Jetzt kommt es dann drauf an, was für eine ASCII Erweiterung man eingerichtet hat so das dann evtl. ein Umlaut angezeigt wird oder eben auch nicht.

Außerdem hab ich das ganze Problem so verstanden, das der Effekt dynamisch zur Laufzeit auftritt. Also, das Programm liest eine Datei ein (wahrscheinlich irgendeine ANSI Textdatei) und gibt dann wieder einen Text aus bei dem allerdings die Umlaute nicht mehr korrekt dargestellt werden (weil wahrscheinlich OEM-Erweiterung von ASCII). Da nützt es ja nu nix, wenn ich die Codes aus irgendeiner Tabelle Nr. 850 für die Umlaute kenne, oder?

Aber eigentlich kann nur Bastih84 wirklich Licht in das Dunkel bringen indem er mal etwas näher beschreibt was das Programm wirklich tut und in welcher Umgebung es das tut (also die Annahme ist ja bisher, das das Programm in einer Win32 Konsole läuft, oder?).


----------



## Tobias K. (26. August 2005)

moin




> Naja, also ASCII sind nur 7 Bits. D.h. 129, 132, 148 gibt es nicht im ASCII Code...


Ja, genau, deshalb muss man ein unsigned char benutzen danach sollte es gehen. Die ersten Zeichen, über 127, wie z.B. Umlaute sind eigentlich gleich.



> Außerdem hab ich das ganze Problem so verstanden, das der Effekt dynamisch zur Laufzeit auftritt. Also, das Programm liest eine Datei ein (wahrscheinlich irgendeine ANSI Textdatei) und gibt dann wieder einen Text aus bei dem allerdings die Umlaute nicht mehr korrekt dargestellt werden (weil wahrscheinlich OEM-Erweiterung von ASCII). Da nützt es ja nu nix, wenn ich die Codes aus irgendeiner Tabelle Nr. 850 für die Umlaute kenne, oder?


Damit hast du absolut recht. Ich bin jetzt aber von einer Benutzereingabe in der Konsole ausgegangen.



> Aber eigentlich kann nur Bastih84 wirklich Licht in das Dunkel bringen indem er mal etwas näher beschreibt was das Programm wirklich tut und in welcher Umgebung es das tut (also die Annahme ist ja bisher, das das Programm in einer Win32 Konsole läuft, oder?).


Japp, wieder richtig 
Also Basti, sieh mal zu.


mfg
umbrasaxum


----------



## Bastih84 (26. August 2005)

Ja, hier bin ich, ich habe ein Programm, das einen DVB-Transportstrom ausliest, jetzt zeigt es mir allerdings statt z.B. Österreich 1 Îsterreich 1 an, das ganze under Windows in der Win32 Konsole


----------



## Tobias K. (27. August 2005)

moin


Ja, dann hatte deepthroat recht.
Von welchem Dateityp (oder Endung) sind denn die Dateien?


mfg
umbrasaxum


----------



## Bastih84 (27. August 2005)

Die Datei, die ich einlese, ist ein DVB-Transportstrom, .ts Endung, dieser besteht ausschließlich aus hex-Zahlen, welche ich als Buchstaben darstellen will, da hier bei einigen Sendern diese Umlaute vorhanden sind, also ich einen hex-Wert von z.B. 153 einlese, welcher dem Ö entspricht, muss ich die Umlaute irgendwie einbinden.


----------



## deepthroat (28. August 2005)

Ich kenn mich mit DVB nicht aus. Daher weiß ich auch nicht welche Zeichenkodierung da verwendet wird. Evtl. kann man sogar verschiedene Zeichenkodierungen darin verwenden?

Also wenn du die Zeichen einliest mußt du halt entsprechend "übersetzen". Dazu mußt du natürlich wissen (wie schon gesagt) welche Zeichensätze verwendet werden. Wenn also der sogenannte ANSI Zeichensatz von Windows (cp1252) im DVB Transportstrom verwendet wird  und auf der Konsole vermutlich Codepage 850, dann mußt du z.B. für das Ö, welches im cp1252 Zeichensatz den Kode 0xD6 bzw. 214 dezimal hat (was dem großen I mit einem Acute in der Codepage 850 entspricht) in 0x99 bzw. 153 dezimal ändern wenn du es ausgibst.

Das wäre jetzt sicherlich erstmal die einfachste Lösung. Allerdings bekommst du natürlich Probleme wenn der Datenstrom bzw. die Konsole doch plötzlich einen anderen Zeichensatz verwendet.

Es gäbe auch noch eine andere Möglichkeit. Da bin ich mir aber nicht sicher ob das funktioniert. Ich könnte das mal ausprobieren wenn du willst. Da müßte ich mich allerdings noch etwas schlau machen.


----------



## Bastih84 (29. August 2005)

Ich hab mal ein wenig rumprobiert, wenn ich meine ausgelesenen Daten in eine Datei speichere, wird Ö usw. richtig dargestellt.

Also gehe ich davon aus, dass das selbe Problem ist, als wöllte ich z.B.


```
cout << "Österreich 1";
```

ausgeben, gibt es hier eine Möglichkeit das in der Konsole richtig darzustellen, Oder muss ich sowas abfangen, indem ich z.B. Ö abfange und durch Oe ersetzte


----------



## deepthroat (30. August 2005)

Das hab ich doch gerade erklärt, oder nicht? Es werden verschiedene Zeichensätze unter Windows und in der Konsole verwendet. 

Wenn du die Ausgabe in eine Datei speicherst und mit einem Editor anschaust, der den gleichen Zeichensatz verwendet wie der Datenstrom den das Programm einliest dann ist natürlich alles in Ordnung und die Umlaute werden korrekt dargestellt. Wenn du es allerdings mit einem DOS Editor anschaust werden die Umlaute wieder durch andere Zeichen ersetzt sein.

Es kommt drauf an was du willst. Welchen Zeichensatz möchtest du denn verwenden? Möchtest du das es in der Konsole "richtig" ist oder möchtest du es in eine Datei speichern die mit einem (Windows-)Editor angeschaut werden soll?

Wenn du Wert darauf legst, das die Ausgabe auf der Konsole korrekt ist mußt du die Zeichen in den Zeichensatz übersetzen der auf der Konsole verwendet wird. Unter einem deutschen Windows ist das normalerweise der erweiterte ASCII Zeichensatz Codepage 850.

Wenn du beides willst, mußt du tatsächlich die Umschrift Oe statt Ö usw. verwenden (außer du übersetzt immer in den "DOS-Zeichensatz" und nimmst einen Windows-Editor bei dem man den Zeichensatz umstellen kann).


----------

