Gibt es eine einfache Möglichkeit, UTF-8-Oktette in Visual Studio zu schreiben?

7

Ich habe ein Problem, ich muss UTF-8-codierte Strings auf Standard-Char-Typen im C ++ - Quellcode verwenden:

%Vor%

Normalerweise, wenn ich ein UTF-8 Zeichen schreiben möchte, muss ich Oktette wie oben verwenden. Gibt es etwas in Visual Studio (ich verwende VS 2013 Ultimate), das mir erlauben könnte, zum Beispiel "ĄĘĆŻ" zu schreiben und jedes Zeichen automatisch in mehrere UTF-8-Oktetts umzuwandeln, wie im obigen Beispiel? Oder sollte ich const wchar_t* verwenden und eine lib finden, die breite Strings in UTF-8-codierte Standardzeichenfolgen konvertieren kann?

Wenn es so etwas nicht gibt, können Sie eine externe Software dafür vorschlagen? Ich habe wirklich keine Lust, die Charakterkarte für jedes Symbol / jeden nicht-lateinischen Buchstaben zu durchsuchen.

Entschuldigung für mein Englisch, Vielen Dank im Voraus.

    
Michael K. Sondej 14.11.2013, 20:13
quelle

2 Antworten

16

Sie können die undokumentierte Pragma-Direktive% verwenden. Code%. Auf diese Weise werden Ihre execution_character_set("utf-8") -Zeichenfolgen als UTF-8 in Ihrer Binärdatei gespeichert. Übrigens ist dieses Pragma nur in Visual C ++ - Compilern verfügbar.

%Vor%     
Jigsore 15.11.2013, 16:30
quelle
2

Es gibt keine Möglichkeit, das Zeichenfolgeliteral in UTF-8 mit den aktuellen Versionen von VC ++ direkt zu schreiben. Eine zukünftige Version sollte UTF-8 String-Literale haben.

Ich habe versucht, Nicht-ASCII-Text direkt in ein String-Literal in einer Quelldatei einzufügen und die Datei als UTF-8 gespeichert. Ein Blick auf die Quelldatei in einem Hexeditor bestätigte, dass sie als UTF-8 gespeichert wurde, aber das tut immer noch nicht, was Sie wollen. Zur Kompilierungszeit werden diese Bytes entweder einem Zeichen auf der aktuellen Codepage zugeordnet oder Sie erhalten eine Warnung.

Die portabelste Methode zum Erstellen eines Zeichenfolgenliterals besteht also darin, die Oktetts explizit wie bisher zu schreiben.

Wenn Sie eine Laufzeitkonvertierung durchführen möchten, gibt es einige Optionen.

  1. Die Windows-API hat WideCharToMultiByte , die einen Text als UTF-16 aufnehmen und in Multibyte-Kodierungen wie UTF-8 konvertieren kann.
  2. Wenn Sie eine ausreichend neue Version des Compilers und der C ++ - Laufzeit verwenden, können Sie std::codecvt verwenden. , um Ihre breite Zeichenfolge in UTF-8 umzuwandeln.

Sie können eine dieser Techniken verwenden, um ein kleines Dienstprogramm zu schreiben, das die Konvertierung durchführt und sie als explizite Oktette ausgibt, die Sie für ein Zeichenfolgenliteral benötigen würden. Sie könnten dann die Ausgabe kopieren und in Ihren Quellcode einfügen.

    
Adrian McCarthy 14.11.2013 21:57
quelle

Tags und Links