ubuntuusers.de

Probleme mit ASCII, C und HexEditor

Status: Ungelöst | Ubuntu-Version: Ubuntu 5.10 (Breezy Badger)
Antworten |

T-Silver

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Hallo, ich habe Breezy Badger auf englisch installiert. Seit kurzem habe ich angefangen zu programmieren. Dabei bin ich auf ein schwerwiegendes Problem gestossen. Ich programmiere in C (eigentlich C++), jedesmal wenn ich ANSI Zeichen (Bsp.: Umlaute ä,ö,ü) ausgeben will erscheint in meiner Bash nur ein Rechteck, noch schlimmer wenn ich ASCII Zeichen mit den Nummern 0 bis 32 ausgeben möchte erscheint ebenfalls ein Rechteck. D.h. mein Rechner scheint nur ASCII zeichen mit den Nummern 33 bis 127 ausgeben zu können. Die Zeichen 0 bis 32 und 128 bis 255 gehen nicht (ASCII Tabelle siehe http://www.torsten-horn.de/techdocs/ascii.htm). Mein Hexeditor hat das gleiche Problem. Ich benutze den gcc als compiler, ein- und ausgabe laufen über die Bash, als Hexeditor verwende ich ghex.

Was ich dann überhaupt nicht verstehe ist weshalb ich die Umlaute und andere Zeichen direkt in die Bash eingeben kann. Gibt es irgendjemand, der mir hier helfen kann? Ich habe sogar schon fertige Programme die auf anderen Systemen laufen compliert. Diese geben auf anderen Systemen (Rechnern) Umlaute, etc. korrekt aus, bei mir kommen allerdings bloß Rechtecke.

Grüsse T-Silver.

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

In der Tat, seltsam. Was sagt denn "locale" ? Vielleicht läuft das System auf UTF-8, aber das sollte ja eigentlich auch mit dem ASCII Zeichensatz zurecht kommen.

T-Silver

(Themenstarter)

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Ich versteh im Moment leider nicht worum es geht.

tux21b Team-Icon

Avatar von tux21b

Anmeldungsdatum:
15. August 2005

Beiträge: 1698

Wohnort: Linz.at

Die ASCII Zeichen bis 32 sind Steuerzeichen und können sowieso nicht dargestellt werden. Und der erweiterte ASCII Satz (also der wo man auch noch zusätzlich das 8. Bit verwendet um verschiedene Sonderzeichen + Umlaute darstellen zu können) sprich die Nummer 128-255 ist in den verschiedenen Ländern unterschiedlich festgelegt.

Wenn du die Strings/Zeichen im Quellcode als utf-8 eingibst, und dein Terminal aber nur mit irgendeinem ASCII-Satz arbeitet und nicht mit Unicode, kann es z.B. zu solchen Darstellungsprobleme kommen, da bei utf-8 (Unicode) und ASCII auch nur die ersten 127 Zeichen gleich sind.

Poste hier bitte einmal die Ausgabe des Befehls "locale" (einfach in einem Terminal eingeben). Dann siehst du welcher Zeichensatz eingestellt ist.

Gruß
tux123

H-IV-SS

Avatar von H-IV-SS

Anmeldungsdatum:
5. Januar 2006

Beiträge: 139

tux123 hat geschrieben:

Die ASCII Zeichen bis 32 sind Steuerzeichen und können sowieso nicht dargestellt werden.

Bis 31, das 32te ist schon das Leerzeichen. ☺

Wie kann man im Terminal denn den Zeichensatz umstellen?
Im Moment habe ich utf-8 das ist doch auch am empfehlenswertsten, oder?

T-Silver

(Themenstarter)

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

@tux123:

Nachdem ich locale eingegeben habe erhielt ich folgende Ausgabe:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Es scheint alles auf US zu stehen (USA?!), kann es daran liegen. Ich habe mein System auf englisch eingestellt um dabei etwas englisch zu lernen.

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

T-Silver hat geschrieben:

Es scheint alles auf US zu stehen (USA?!), kann es daran liegen. Ich habe mein System auf englisch eingestellt um dabei etwas englisch zu lernen.

Der erste Teil bis zum Punkt (en_US) ist die bei dir eingestellte Sprache. In deinem Fall also US-amerikanisches Englisch. Der Teil nach dem Punkt gibt den Zeichensatz, den du verwendest, an.
Dein Terminal interpretiert die Zeichen, die es ausgeben soll als UTF-8. Wenn diese allerdings ISO-8859-*-kodiert sind, was anscheinend bei deinem Programm der Fall ist, durch ein entsprechendes Rechteck angezeigt.
Vielleicht hast du ja die Möglichkeit deinen Editor so zu konfigurieren, dass die Dateien UTF-8-kodiert gespeichert werden. Ich habe von C(++) leider kaum Ahnung. Aber möglicherweise besteht auch die Möglichkeit, direkt im Quellcode Anweisungen unterzubringen, in welcher Kodierung die Zeichen zu behandeln sind.

T-Silver

(Themenstarter)

Anmeldungsdatum:
22. Februar 2006

Beiträge: 72

Wohnort: Greifswald

Danke, ich werde mal schauen ob ich heraus finde woran es liegt. Wenn ich es schaffe poste ich es hier.

Antworten |