Ich arbeite mit einer C ++ - Quelldatei, in der ich eine Zeichenfolge in Anführungszeichen haben möchte, die asiatische Unicode-Zeichen enthält.
Ich arbeite mit QT unter Windows, und die Entwicklungsumgebung von QT Creator hat kein Problem damit Unicode anzuzeigen. Die QStrings haben auch kein Problem, Unicode zu speichern. Wenn ich meinen Unicode einfüge, wird in etwa Folgendes angezeigt:
%Vor%Wenn ich jedoch speichere, werden alle meine liebenswerten Unicode-Zeichen? Marken.
Ich habe versucht, die Quelldatei zu öffnen und sie als Unicode-codiert zu speichern. Es wird dann korrekt in QT Creator angezeigt und gespeichert. Bei der Kompilierung scheint der Compiler jedoch keine Ahnung zu haben, was damit zu tun ist, und er wirft eine Unmenge fehlgeleiteter Fehler und Warnungen wie "stray \ 255 in program" und "null character (s) ignored".
Was ist der richtige Weg, um Unicode in C ++ - Quelldateien einzufügen?
Persönlich verwende ich keine Nicht-ASCII-Zeichen im Quellcode. Der Grund dafür ist, dass Sie, wenn Sie in Ihren Quelldateien willkürliche Unicode-Zeichen verwenden, sich Gedanken über die Codierung machen müssen, für die der Compiler die Quelldatei hält, welchen Ausführungszeichensatz er verwendet und wie er die Quelle ausführen soll Zeichensatzkonvertierung.
Ich denke, es ist eine viel bessere Idee, Unicode-Daten in einer Art von Ressourcendatei zu haben, die zur Kompilierzeit in statische Daten kompiliert oder zur Laufzeit für maximale Flexibilität geladen werden können. Auf diese Weise können Sie steuern, wie die Codierung erfolgt, ohne sich darum zu kümmern, wie sich der Compiler verhält, was möglicherweise durch die lokalen Gebietsschemaeinstellungen zur Kompilierzeit beeinflusst wird.
Es erfordert ein bisschen mehr Infrastruktur, aber wenn Sie es internationalisieren müssen, lohnt es sich, die Zeit zu nutzen, eine flexible und robuste Strategie zu wählen oder zu entwickeln.
Es ist zwar möglich, universelle Zeichen-Escapes ( L'\uXXXX'
) oder explizit codierte Byte-Sequenzen ( "\xXX\xYY\xZZ"
) im Quellcode zu verwenden, dies macht Unicode-Strings jedoch für Menschen praktisch nicht lesbar. Wenn Sie Übersetzungen haben, ist es für die meisten am Prozess Beteiligten einfacher, mit Text in einem vereinbarten universellen Zeichencodierungsschema umgehen zu können.
Verwendung der Schreibweise L
und \u
oder \U
für das Escapen von Unicode-Zeichen:
Abschnitt 6.4.3 der C99-Spezifikation definiert \u
Escape-Sequenzen.
Beispiel:
%Vor% Verwenden Sie eine wchar_t
Schnittstelle? Wenn dies der Fall ist, möchten Sie L"\u1234"
für eine breite Zeichenfolge mit Unicode-Zeichen U + 1234 (hex 0x1234
). (Mit Blick auf die QString-Header-Datei denke ich, dass Sie das brauchen.)
Wenn nicht und Ihre Schnittstelle UTF-8 ist, müssen Sie zuerst Ihren Charakter in UTF-8 kodieren und dann eine schmale Zeichenkette erzeugen, die diese enthält, z. "\xE0\xF8"
oder ähnlich.