wie bekomme ich ä, ü , ö und ß in Stringlisten ein??
-
ich habe es volgendermaßen gelöst:
char *liste[] {"Vorname", "Nachname", "", "Hausnummer", "Postleitzahl", "Ort", "Land"}; char str[] = {'S', 't', 'r', 'a', 225, 'e', '\0'}; liste[2] = malloc(strlen(str)+1); strcpy(liste[2], str);
aber das geht doch bestimmt besser, oder?
-
Wie die Umlaute genau kodiert sind hängt von dem von deinem System verwendeten Kodiersystem ab. In UTF-8 sind die Umlaute zB nicht einmal einzelne Zeichen.
-
Und wenn du's geschafft hast, Terminal und Programm auf die gleiche Kodierung einzustellen, ist
char str[] = {'S', 't', 'r', 'a', 225, 'e', '\0'}; // das gleiche wie char str[] = "Stra\xe1" "e"; // oder char str[] = "Stra\341e";
-
mngbd schrieb:
char str[] = "Stra\341e";
Das hat funktioniert, zu welcher Codierung gehört das?
Worin besteht der Zusammenhang zwischen 225 und \341??
Demnächst muss ich mich mal in dieses Thema einlesen da ich hiervon überhaupt keine ahnung habe. Könnt ihr mir eine seite empfehlen?
-
neo47 schrieb:
mngbd schrieb:
char str[] = "Stra\341e";
Das hat funktioniert, zu welcher Codierung gehört das?
Zu gar keiner, das ist eine Zahl. Die Kodierung ist die Vereinbarung, für welches Zeichen eine Zahl steht. Moderne Kodierungen verwenden teilweise mehr als 1 Byte pro Zahl:
http://de.wikipedia.org/wiki/Zeichenkodierungneo47 schrieb:
Worin besteht der Zusammenhang zwischen 225 und \341??
341 ist oktal, e1 ist hexadezimal. Kannst du prüfen mit
putchar(0341); putchar(0xe1);
neo47 schrieb:
Demnächst muss ich mich mal in dieses Thema einlesen da ich hiervon überhaupt keine ahnung habe. Könnt ihr mir eine seite empfehlen?
http://de.wikipedia.org/wiki/Zahlensystem
und besser:
http://de.wikipedia.org/wiki/Stellenwertsystem
-
Die Code-Page 850 und Ansi-Code sind Tabellen bei denen ja die Buchstaben Zahlen zugeordnet werden. Diese Tabellen sind die Vorgaben für die Kodierung oder?
Wenn das oben richtig ist: Wieso entsprechen dann bei mir ä = 225/0341/e1, ü = 129.., ö und ß der code-page 850 und dieselben nur groß (Ä = 196) der ansi-code-tabelle? Würde das nicht heißen das zwei codierungen verwendert werden??
-
neo47 schrieb:
Diese Tabellen sind die Vorgaben für die Kodierung oder?
Diese Tabellen sind die Kodierung.
neo47 schrieb:
Wenn das oben richtig ist: Wieso entsprechen dann bei mir ä = 225/0341/e1, ü = 129.., ö und ß der code-page 850 und dieselben nur groß (Ä = 196) der ansi-code-tabelle? Würde das nicht heißen das zwei codierungen verwendert werden??
Keine Ahnung, was code-page 850 ist (so ein Windows-Hirnschaden?). Auch eine ANSI-Kodierung kenne ich nicht, wenn es die gibt, kennt die wahrscheinlich keine deutschen Sonderzeichen (ANSI = American ...).
Wenn du unbedingt nur ein Byte pro Zeichen willst, empfehle ich ISO 8859-15. Wenn man nicht hardwareseitig eingeschränkt ist, sind sich alle einig, dass man UTF-* verwenden sollte:
http://de.wikipedia.org/wiki/UTF-8
...
-
code-page 850 und ansi-code: http://www.bar-computer.de/temp/ausgang/ASCII-Drucken.pdf
mngbd schrieb:
Wenn du unbedingt nur ein Byte pro Zeichen willst, empfehle ich ISO 8859-15. Wenn man nicht hardwareseitig eingeschränkt ist, sind sich alle einig, dass man UTF-* verwenden sollte:
http://de.wikipedia.org/wiki/UTF-8wie schaff ich das, dass mein code mit utf-.. codiert wird?
Ich dachte das hängt vom system ab.
rüdiger schrieb:
Wie die Umlaute genau kodiert sind hängt von dem von deinem System verwendeten Kodiersystem ab.
-
neo47 schrieb:
code-page 850 und ansi-code: http://www.bar-computer.de/temp/ausgang/ASCII-Drucken.pdf
Das ist Blödsinn, es gibt keine ANSI-Kodierung. Was es gibt, ist ISO 8859, das ist eine Familie von 1-Byte-Sätzen, die alle von 0 bis 127 mit dem ASCII-Satz übereinstimmen. Wenn du uralte DOS-Sätze haben willst: ich halte dich nicht weiter auf.
neo47 schrieb:
wie schaff ich das, dass mein code mit utf-.. codiert wird?
Deine Programme kodierst du selbst. Wie du das Ausgabegerät einstellen musst, damit es die gleiche Kodierung verwendet wie du, steht hoffentlich in der Anleitung. Im schlimmsten Fall musst du dich dem Ausgabegerät anpassen, oder es austauschen.
-
Im Falle der Windows-Konsole hast du da sehr schlechte Karten.
Das wird nämlich relativ schnell zu einer richtigen Qual. Die Windows-Konsole ist sozusagen ein Relikt aus der Vergangenheit und verhält sich auch so. Du musst schon einiges in Bewerbung setzen, damit du damit vernünftig arbeite kannst. Doch der Aufwand lohnt sich meistens nicht. Stattdessen ist es sinnvoller zu überdenken, ob man die Umlaute tatsächlich braucht bzw. wie man sie vermeiden kann. Auch ein GUI Framework (mit Unicode) wäre evtl. eine Möglichkeit.
-
Zwei Zeilen extra Code für die Unterstützung von Umlauten empfinde ich nicht als allzu qualvoll:
setlocale ( LC_ALL, "German" ); system ( "chcp 1252" ); // do your umlauts input/output stuff :) puts("äöüß"); fgets(buf, ...
-
Big Brother schrieb:
Zwei Zeilen extra Code für die Unterstützung von Umlauten empfinde ich nicht als allzu qualvoll:
setlocale ( LC_ALL, "German" ); system ( "chcp 1252" ); // do your umlauts input/output stuff :) puts("äöüß"); fgets(buf, ...
Muss man nicht ndoch zusätzlich die Schriftart der Konsole ändern?
-
Ist die aktuelle Schriftart Lucida Console dann nein, sonst ja.
Joooooo!
-
War da nicht was mit "CharToOem(...)" oder "OemToChar(...)"
Sorry ich weiss es nicht genau, schau halt mal nach.
-
system ( "chcp 1252" );
puts("äöüß");Ägypten?
Das soll laufen?
Der Prozess,welcher die Codepage ändert,ist doch längst beendet bei Aufruf von puts.
-
Big Brother schrieb:
setlocale ( LC_ALL, "German" ); system ( "chcp 1252" ); // do your umlauts input/output stuff :) puts("äöüß"); fgets(buf, ...
es funktioniert nur wenn ich den system() aufruf weglasse. Mit dem Systemaufruf ist wieder alles wie vorher, und es wird irgendetwas anderes ausgegeben.
Edit:
hab den Satz mit der Schriftart ändern übersehen. Ich hab die Schriftart jetzt geändert und siehe da es funktioniert.kann es sein das wenn ich die locale auf german stelle, automatisch die codepage 1252 verwendet wird, sonst würde es ja wie oben beschrieben ohne system() nicht funkionieren
-
Wutz schrieb:
Ägypten?
Rembrand?
Wutz schrieb:
Das soll laufen?
Ägypten?
Wutz schrieb:
Der Prozess,welcher die Codepage ändert,ist doch längst beendet bei Aufruf von puts.
Na, was für ein Glück!
Da soll ja auch kein zweiter Prozess nebenherlaufen, wir wollen doch Ressourcen schonen. Es soll lediglich die Codepage vor puts geändert werden. Nach einem puts ändert sich die eingestellte Codepage nicht selbständig. Das wäre ja ganz schön doof, ne, müsste man doch sonst vor jeder weiteren Ausgabe einen Systemaufruf machen.neo47 schrieb:
kann es sein das wenn ich die locale auf german stelle, automatisch die codepage 1252 verwendet wird, sonst würde es ja wie oben beschrieben ohne system() nicht funkionieren
Standardeinstellung ist Codepage 850. Die aktuelle Einstellung kannst du dir z.B. mit
system ( "chcp" ); anzeigen lassen (Oder eine Konsolenfunktion aus einer Bibliothek deines vertrauens benutzen).
-
Wollt ihr das nicht in den Windows-Foren besprechen?
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.