Wie konvertieren Sie (nicht unbedingt programmgesteuert) zwischen Windows 'wchar_t und GCC/Linux One?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

Frage

Angenommen, ich habe diese Windows wchar_t String:

L"\x4f60\x597d"

und

L"\x00e4\x00a0\x597d"

und möchte es (nicht unbedingt programmgesteuert; es wird eine einmalige Sache sein) in das GCC/Linux-Wchar_t-Format, das UTF-32 AFAIK ist, konvertieren. Wie mache ich es? (Eine allgemeine Erklärung wäre schön, aber ein Beispiel basierend auf diesem konkreten Fall wäre auch hilfreich.)

Bitte lenken Sie mich nicht auf Charakter -Conversion -Sites. Ich möchte aus L " x (etwas)" Form und nicht "Endcharakter" -Form konvertieren.

War es hilfreich?

Lösung

Eine der am häufigsten verwendeten Bibliotheken, die eine Zeichenkonvertierung durchführen, ist die Intensivbibliothek http://icu-project.org/ Es wird zB von einem Schub verwendet http://www.boost.org/ Bibliotheken.

Andere Tipps

Würde konvertieren von UTF-16 (dem visuellen C ++ wchar_t Form) bis UTF-8, dann möglicherweise von UTF-8 bis UCS-4 (der GCC wchar_t Formular), eine akzeptable Antwort sein?

Wenn ja, dann können Sie in Windows das verwenden WideCharToMultiByte Funktion (mit CP_UTF8 für die CodePage Parameter) für den ersten Teil der Konvertierung. Dann können Sie entweder die resultierenden UTF-8-Zeichenfolgen direkt in Ihr Programm einfügen oder weiter konvertieren. Hier ist eine Nachricht, die zeigt, wie eine Person es gemacht hat? Sie können auch Ihren eigenen Code schreiben oder ihn manuell tun (die offizielle Spezifikation mit einem Abschnitt, wie Sie UTF-8 genau in UCS-4 konvertieren können, finden Sie hier). Möglicherweise gibt es einen einfacheren Weg, ich bin noch nicht übermäßig mit den Conversion -Zügen unter Linux vertraut.

Sie müssen sich nur um Charaktere Sorgen machen zwischen xd800 und xdfff inklusive. Jedes andere Charakter sollte bei Null gefüllt von UTF-16 bis UCS-4 genau das gleiche zugeordnet werden.

Ignacio hat Recht, wenn Sie keine seltenen chinesischen Zeichen (oder einige ausgestorbene Skripte) verwenden, ist die Zuordnung eins zu eins. (Der offizielle "Lingo" lautet "Wenn Sie keine Charaktere außerhalb von BMP haben")

Dies ist der Algorithmus, nur für den Fall: http://unicode.org/faq/utf_bom.html#utf16-3Aber wiederum nutzlos für Ihren wirklichen Fall.

Sie können auch die kostenlosen Quellen von Unicode verwenden (ftp://ftp.unicode.org/public/programs/cvtutf)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top