Die Sache mit den Sonderzeichen
-
Hallöchen zusammen,
ich bin gerade dabei C zu lernen, habe aber ein Problem mit den Sonderzeichen. Aus anderen Programmiersprachen kenne ich den Variablentyp "String" den es in C (zumindest in C selbst) ja nicht gibt. Ein char-Array kann aber keine Sonderzeichen enthalten.
{ char zeichenkette[] = "äöü€€€öäü"; printf("Ausgabe: '%s'\n", zeichenkette); }
Die Ausgabe ist dann: "Ausgabe äöüäöü", die €€€ entfallen einfach. Leider habe ich bisher keine Website gefunden, die mir den Umgang mit dieser Problematik erläutert. Irgendwo habe ich gelesen mal soll wchar-t benutzen, aber wenn ich dann
{ wchar_t zeichenkette[] = L"äöü€€€äöü"; printf("Ausgabe: '%s'\n", zeichenkette); }
mache, bekomme ich nur "Ausgabe ä". Außerdem kann ich wchar_t-Zeichenketten ja nicht an Funktionen à la strcpy, strcmp, etc übergeben, da die ja ein char-Typ erwarten. Mich irritert diese Problematik ziemlich.
Vielleicht ha ja jemand eine gute Page auf der das erläutert wird!? Bin auf jeden Fall über jeden Tipp dankbar.
-
Im wesentlichen gibt es zu jeder Funktion ein wchar_t-Äquivalent, die in deiner Compilerhilfe erklärt sein müßten:
strncpy -> wcscpy
strcmp -> wcscmp
printf -> wprintf
usw. usf.Da ist nicht viel Magie dabei.
-
Ich tippe du nutzt WIndows und schreibst ein Programm für die Win32-Konsole.
Schau mal in die Konsolen FAQ http://www.c-plusplus.net/forum/viewforum-var-f-is-20.htmlDenn das Problem ist: Windows verwendet einen anderen Zeichensatz als die Win32 Konsole. dh, wenn du € schreibst, interpretiert die Konsole das vermutlich anders.
wchar_t könnte natürlich die Lösung sein.
-
Shade Of Mine schrieb:
Ich tippe du nutzt WIndows und schreibst ein Programm für die Win32-Konsole.
Sorry - falsch
Ich schreibe ein Programm für Linux. Das soll ein kleiner Webserver werden (keine Angst: nur zum lernen der Sprache ;-)). Über einen speziellen Reqeuest-Typ, soll die eigegebe URI einfach wieder ausgegeben werden. Beispiel: ECHO /index.php?test=€€€€€
Mir stellt sich nur grad die Frage, wie ich den URLencode realisiere? Denn der Browser sendet ja nicht das € sondern den entsprechenden URL-Codierten String (weiß nicht auswendig wie dieser lautet). Ich glaube das wird noch etwas komplexer als ich dachte, vielleicht mache ich dazu mal ein neues Topic auf
-
ähm, was an den server geht, ist immer urlencoded.
den server kümmerts recht wenig, was rein und raus geht.
-
Hm, aber wenn der Browser einen URL encoded String bekommt, diesen in einem char-Array ablege und das char-Array (inkl. HTTP-Header und HTML-Body) an den Browser zurück sende, dann erscheint dort doch auch der URL encoded String!?
-
jep, und?
der browser muss sich nicht mit euro zeichen rumschlagen, die sind entweder irgendwie encoded oder werden binär rumgeschmissen, also keine umwandlung vorgenommen.anscheinend kommts dir nur auf die ausgabe in der konsole an... ist es so tragisch, wenn da ein euro symbol kaputt ist?
-
Nein, eigentlich geht es mir um die Ausgabe im Browser. Ich habe das ganze jetzt mal getestet.
Eingabe im Browser: http://localhost:4000/input?test=äöüß@€
Rückgabe vom Server an den Browser: /input?test=%E4%F6%FC%DF@%80Also muss ich die Zeichen vor dem Senden an den Browser ja umwandeln, so kann das ja niemand lesen.
Edit:
Der erste Versuch war mit Mozilla. Mozilla ändert die Daten autoamtisch vor dem Senden nach URLencoded. Hab es jetzt noch mal mit dem IE getestet, dieser überträgt die Zeichen nicht-URLencoded und sie werden auch korrekt im Browser angezeigt. Also muss ich nun einen Weg suche, URLencoded Strings in "normale" Strings umzuwandeln.