Unicode (UTF-16) Literale in UTF-8 String verwenden
-
Hallo zusammen,
Soweit ich weiß, ist es möglich in einem UTF-8-String UTF-16 Literale zu verwenden.
Diese belegen dann zwar mehr Platz als ein Zeichen, aber in einem String ist das ja glaube ich egal.
Doch diese Strings werden nicht korrekt ausgegeben, da kommen immer komische Zeichen davor.
Kann mir jemande helfen?
lg
Unicoder
-
-
Ok, das hier klappt nicht:
#include <iostream> #include <string> int main() { std::string string = "Grosses Ae: \u00c4"; std::cout << string; return 0; }
-
Vermutlich ist dein Ausgabemedium (deine Konsole) nicht in der Lage (oder wahrscheinlicher: nicht passend eingestellt), um Unicodezeichen anzuzeigen.
Was wird denn stattdessen angezeigt? Wenn da 2 Zeichen Müll stehen, dann interpretiert dein Ausgabegerät die Bytes (Unicode ist schließlich auch nur eine Folge von Bytes (wie alles im Computer), erst die richtige Interpretation macht daraus die passenden Zeichen) als ASCII.
-
Ah, ok danke.
Weißt du auch wie ich sie einstelle?
-
Unicoder schrieb:
Ah, ok danke.
Weißt du auch wie ich sie einstelle?Kommt auf dein System an. Windows? Linux? Was anderes?
-
Ich verwende Windows und als Ausgabe bekomme ich so etwas wie:
|-ä
Das |- sieht aber mehr wie ein Zeichen aus...
-
in einem UTF-8 String kann man keine UTF-16 Zeichen verwenden. z.B. hat das Euro Sign unter UTF-8 3 Zeichen 0xE2 0x82 0xAC und unter UTF-16 ein Wide Character 0x20AC
http://www.fileformat.info/info/unicode/char/20ac/index.htm
für die Test-Ausgabe auf Konsole am besten jedes Zeichen einzeln als Dezimalwert oder Hexwert ausgeben. alternativ das ganze in eine .txt Datei schreiben und mit Word oder Wordpad öffnen
unter C++11 gibt es außer dem L Prefix auch noch andere ...
http://stackoverflow.com/questions/6794590/how-does-file-encoding-affect-c11-string-literals
-
Also als Output in einer *.txt geht das wunderbar, auch das €-Zeichen.
UTF-16 Literale in UTF-8 String gehen ja.
Und das mit der Konsole ist nicht so schlimm, da ich meistens sowieso grafisch programmiere. Und wenn ich zu Debug-Zwecken etwas ausgeben muss kann ich ja darauf verzichten.
Vielen Dank an alle!
-
Unicoder schrieb:
UTF-16 Literale in UTF-8 String gehen ja.
nö.
-
Irgendwie doch...
Ich bekomme jedenfalls den Output den ich haben wollte...
-
Unicoder schrieb:
Also als Output in einer *.txt geht das wunderbar, auch das €-Zeichen.
UTF-16 Literale in UTF-8 String gehen ja.
Und das mit der Konsole ist nicht so schlimm, da ich meistens sowieso grafisch programmiere. Und wenn ich zu Debug-Zwecken etwas ausgeben muss kann ich ja darauf verzichten.
Vielen Dank an alle!nein gehen sie nicht, das es in der "text" datei ok ausschaut liegt vermutlich daran, dass der editor den string als utf16 erkannt hat.
Kannst ja mal die byte darstellung dir anschauen, wenn es nur 2 bytes sind, dann ist es kein utf-8 (für das Euro zeichen)