Sonderzeichen einlesen

mc_gulasch

Erfahrenes Mitglied
Hi Pros,

ich habe schwerwiegende Probleme beim Einlesen von Sonderzeichen aus einer Datei.
ich verwende die Methoden "fgets" und "getc", jedoch beide recht erfolglos.

Zuerst mal kurz zum Programm:
Das Programm liest mittels der o.g. Funktionen (Sonder-)Zeichen aus einer Datei aus. Diese Zeichen werden dann in "unsigned int" umgewandelt, so dass man sie in einem 255-elementigen Array speichern kann (ASCII). Sinn der Sache ist eine Art "Indexer" zu bauen, wie beim Telefonbuch, d.h. wenn man im Indexer den unsigned int - Wert des Zeichens angibt, soll er dort hinspringen, wo alles unter diesem Zeichen gespeichert ist
(z.B.: Index[(unsigned int)'A'] -> adr 111).

Jetzt zum Problem:
1) Es werden Zeichen anders eingelesen. Beispielsweise werden Zeichen wie
œ als £ (unsigned int davon ist > 255)
š als Ü (--------------- " --------------------)
Wie schaffe ich es, dass diese Zeichen tatsächlich als diese Zeichen eingelesen werden
2) Fast wichtiger ist, wie ich es schaffe, dass die o.g. Zeichen im Zahlenbereich [0,255] bleiben

//edit: Das ganz mache ich in C nicht C++
 
Hi.

Was FireFlow damit andeuten wollte ist folgendes:

Du hast die Datei (wahrscheinlich mit einem Windows Editor) im sogenannten ANSI Zeichensatz (Windows Standard Zeichensatz, CP1252) gespeichert. Da hat die Ligatur oe den Wert 156.

Das DOS Fenster benutzt allerdings den erweitereten ASCII Zeichensatz Codepage 850 (bei deutschem Windows) und stellt das Zeichen Nr. 156 als £ dar.

Das Problem ist also der unterschiedliche Zeichensatz der verwendet wird. Man muß dann zwischen den Zeichensätzen konvertieren. Allerdings gibt es in der Codepage 850 keine oe Ligatur. Das heißt dieses Zeichen ist nicht damit darstellbar.

Gruß
 
Aaaahaaa...ok, das muss man natürlich wissen. Dankeschön. Im Endeffekt ist es also egal, ob es als oe oder £ eingelesen wird, da der Wert immer gleich ist. Super! Vielen Dank (mal wieder).

Zum Wert noch selbst: Meine Werte über 255 sind klar, da ich erst auf "char" zugewiesen hab und dann einen type-cast auf unsigned int gemacht habe, was natürlich Schmarrn ist. Richtig ist natürlich ein unsigned char.
 
Zurück