Problem mit Zeichensätzen
-
Moin,
Ich war dabi mir nen kleinen Browser zu schreiben, funktioniert soweit auch alles, jedoch komme ich mit den Zeichnensätzen noch nicht so klar.
Ich empfange die Daten von dem Server in einen normalen Char buffer und übertrage die empfangen bytes dann in ein string objekt.
Also hab ich mir nätürlich dich Daten auch mal angesehen und festgestellt, dass Zeichen wie das ä als 㤠dargestellt werden.
Daraufhin hab ich versucht mich über google schlau zu machen und erfahren, dass es wohl etwas mit dem UTF-8 zeichensatzt zutun hat. Laut google gibt es wohl einige Leute, welche diese zichen reinfach mit dem Original zeichen replacen.
Diese Lösung finde ich nicht wirklich schön, da ich mir nicht ne liste mit allen möglichen Zeichen anlegen will, welche ich replacen muss.vllt. kann mich da ja mal jemand etwas besser aufklären, was es damit aufsich hat.
mfg Darter
-
Was genau möchtest du wissen? Wenn du UTF-8 hast, dann stell UTF-8 dar. Wenn du UTF-8 nicht darstellen kannst, dann musst du die Zeichen umwandeln in den Zeichensatz, den du darstellen kannst/möchtest. Das macht man natürlich nicht von Hand, dafür gibt es Bibliotheken, z.B. iconv oder ICU. In C++11 sind solche Funktionen auch Teil der Standardbibliothek (Header codecvt).
-
Hey.
Wie gesagt blick ich da noch nicht ganz durch.Wenn ich in c++ ein char array so anlege:
char test[] = "ÄäÖöÜü";Dann habe ich in diesem Array auch ÄäÖöÜü stehen.
Schicke ich nun einen request an einen server, teilt er mir normalereise in seinem header ja mit welchen zeichensatz sein Content hat, bsw so:
Content-Type: text/html; charset=UTF-8Ok, also empfange ich seinen Content und speichere diesen auch wieder in einen char array.
Nun habe ich in dem buffer statt einen ä eben 㤠stehen.
Ich wollte nun wissen warum das so ist?
Macht es einen Unterschied ob in in meinen Projektsetings Multibyte oder Unicode als Zeichensatz angebe?
Und was müsste ich machen um meine Umlaute und Sonderzeichen ganz normal darstellen zu können?mfg
-
hey.
sry. fürs pushen, aber ich hänge immer noch an dem Problem und komme einfach nicht weiter

-
Darter schrieb:
Wenn ich in c++ ein char array so anlege:
char test[] = "ÄäÖöÜü";Dann habe ich in diesem Array auch ÄäÖöÜü stehen.
Schicke ich nun einen request an einen server, teilt er mir normalereise in seinem header ja mit welchen zeichensatz sein Content hat, bsw so:
Content-Type: text/html; charset=UTF-8Ok, also empfange ich seinen Content und speichere diesen auch wieder in einen char array.
Nun habe ich in dem buffer statt einen ä eben 㤠stehen.
Ich wollte nun wissen warum das so ist?Das ist so, weil für die Repräsentation eines ä im UTF-8 - Zeichensatz zwei Byte benutzt werden. Wie SeppJ schrieb, wirst Du eine Konvertierung vornehmen müssen. Entweder mittels einer geeigneten Bibliothek, oder aber, wenn es lediglich um die Umlaute und das ß gehen sollte, kannst Du das auch selbst machen, wie Du hier schon erkannt hast:
Darter schrieb:
Laut google gibt es wohl einige Leute, welche diese zichen reinfach mit dem Original zeichen replacen.
Der Begriff 'Original Zeichen' ist übrigens in diesem Zusammenhang seltsam, denn original ist auch das ä in UTF-8, die interne Repräsentation ist halt anders.
-
Hallo,
Es ist ja nicht mal sicher ob dein Stringliteral überhaupt UTF8 ist. Das hängt doch von den Einstellungen deines Editors ab.
Lies z.Bsp. auch mal das hier
http://stackoverflow.com/questions/688760/how-to-create-a-utf-8-string-literal-in-visual-c-2008
-
Braunstein schrieb:
Hallo,
Es ist ja nicht mal sicher ob dein Stringliteral überhaupt UTF8 ist. Das hängt doch von den Einstellungen deines Editors ab.
Lies z.Bsp. auch mal das hier
http://stackoverflow.com/questions/688760/how-to-create-a-utf-8-string-literal-in-visual-c-2008Bin mir nicht ganz sicher was du meinst, etwa den Zeichensatzt, welchen ich in den Projektsettings einstellen kann? Fals du das meinst, dort habe ich Multibyte eingestellt.
-
Das meinte ich. Du brauchst nur deine cpp Datei in einem Editor zu öffnen der kein UTF8 kann und speichern und schon sind deine Zeichen futsch. Hier sollte man lieber die ASCII code Representation verwenden. Code-Tabellen gibts überall im Netz.
http://www.utf8-zeichentabelle.de/
Du kannst vielleicht nochmal das hier lesen.
http://www.codeproject.com/Articles/38242/Reading-UTF-8-with-C-streams
http://www.codeproject.com/Articles/14637/UTF-8-With-C-in-a-Portable-Way
-
Du solltest Dich erstmal mit Unicode beschäftigen sonst wird das nichts. Hier ist mal ein Link: http://unicode.e-workers.de/about_unicode.php mit ein paar Erklärungen. Tante Google ist auf jeden Fall Dein Freund zu diesem Thema.
leftshift
-
Braunstein schrieb:
Das meinte ich. Du brauchst nur deine cpp Datei in einem Editor zu öffnen der kein UTF8 kann und speichern und schon sind deine Zeichen futsch. Hier sollte man lieber die ASCII code Representation verwenden. Code-Tabellen gibts überall im Netz.
http://www.utf8-zeichentabelle.de/
Du kannst vielleicht nochmal das hier lesen.
http://www.codeproject.com/Articles/38242/Reading-UTF-8-with-C-streams
[url]http://www.codeproject.com/Articles/14637/UTF-8-With-C-in-a-Portable-Way[cpp]Verstehe nicht ganz was das mit der cpp zu tun haben soll, da wie ich oben schon mal geschrieben hab, wen ich ein char Array anlege:
[cpp]char szString[] = "äÄöÖüÜ"[/cpp]
habe ich in diesem Array auch die Zeichen "äÄöÖüÜ" steht.Wenn ich allerdings Content von einem Server empfange indem ä,Ä,ö,Ö,ü oder Ü vorkommt, werden diese Zeichen nichtmehr als "äÄöÖüÜ", sondern das ä als ã¤.
Aus diesem Grund vermute ich, dass es nichts mit meiner IDE zu tun hat.
Ist das vllt die Anzeigeart, wie UTF-8 diese Zeichen darsatellt?
-
Darter schrieb:
wen ich ein char Array anlege:
char szString[] = "äÄöÖüÜ"habe ich in diesem Array auch die Zeichen "äÄöÖüÜ" steht.
Moment, so einfach ist das nicht. Du hast in deinem Array Bytes stehen, die diese Zeichen repräsentieren. Leider gibt es aber nun ziemlich viele Möglichkeiten, wie man Zeichen als Bytes im Speicher ablegt. Diese Möglichkeiten nennt man Zeichencodierungen, und eine davon benutzt dein Quelltexteditor.
Welchen Speicherinhalt dein Code da oben erzeugt, hängt also von der Einstellung deines Editors ab.
Darter schrieb:
Wenn ich allerdings Content von einem Server empfange indem ä,Ä,ö,Ö,ü oder Ü vorkommt, werden diese Zeichen nichtmehr als "äÄöÖüÜ", sondern das ä als ã¤.
Du empfängst Bytes, keine Zeichen. Aus den Bytes werden erst dann Zeichen, wenn du dich für eine Zeichencodierung entscheidest, die Bytes also auf eine ganz bestimmte Art und Weise als Zeichen interpretierst. Und wenn da seltsame Zeichen herauskommen, hast du offenbar nicht dieselbe Zeichencodierung wie der Server benutzt.