2012-03-28 7 views
-1

Ich möchte \u Escape-Sequenzen in Text verwenden, aber die Konvertierung scheint derzeit verwirrend.wxWidgets und Konvertierung in und von Unicode Codepunkten

Soweit ich verstehe \u verwendet Notation \uXXXX wo X ist eine Hexadezimalzahl, und beschreibt einen Codepunkt in utf8? Ebene? Aber utf8 ist eine Codierung mit variabler Länge, so dass es nicht unbedingt 4 Ziffern lang ist?

Also wie geht man bei der Umwandlung wxString[0] -> '\uXXXX' sequece? Benutze ich mb_str(wxConvUTF8) oder was? All diese Unicode-Conversion-Sachen scheinen mir im Moment wirklich verwirrend zu sein.

Und was mit der umgekehrten Konvertierung zu tun? Wenn ich die Eingabe mit "\ uXXXX" -Sequenzen erhalte, was ist der richtige Weg, sie inline zu finden und in Unicode-Zeichen für die Ausgabe zu konvertieren?

+1

Es gibt keinen "Codepunkt in der utf8-Ebene". Beschreibe einfach, was du versuchst. Geben Sie auch an, welche Version von wxWidgets (2.8 oder 2.9) Sie verwenden - 2.9 ist viel einfacher für dieses Zeug. – ravenspoint

+0

Ja, das Zeug ist verwirrend. Ich stimme mit Ravenspoint überein, die Frage wäre besser, wenn Sie besser beschreiben würden, was Sie zu tun versuchen. Die '\ u '-Notation sieht aus wie eine C++ 11-Funktion, verwenden Sie stattdessen' \ x'. http://stackoverflow.com/questions/6796157/unicode-encoding-for-string-literals-in-c11 –

Antwort

1

Wie geht man wxString bei der Umwandlung von [0] -> '\ uXXXX'

Sie dies tun könnte, in wxWidgets v2.9.x

wxString x = L"\x014C"; 
const char* xbuf = (const char*)x.wc_str(); 
wxString y = wxString::Format("%s = \\u%02X%02X",x,xbuf[1],xbuf[0]); 
wxMessageBox(y,"Unicode test"); 

Welche dies erzeugt:

enter image description here

Hinweis der Reihenfolge, das Bytes in XBUF zugegriffen wird. Dies ist nicht plattformübergreifend! Es hängt davon ab, wie die Bytes in einem Wort auf Ihrem Computer gespeichert sind. Aus diesem Grund wird UTF8 oft anstelle von UTF16 verwendet.

+1

Was für eine seltsame Verwendung von fn_str() für etwas, das überhaupt nicht wie ein Dateiname aussieht. –

+0

Sie haben Recht, VZ. wc_str() ist eine bessere Wahl. – ravenspoint

+0

"Deshalb wird UTF8 oft anstelle von UTF16 verwendet." Der Grund dafür, dass UTF-8 oft verwendet wird, ist, dass es für viele C- oder C++ - APIs keine eigentliche Arbeit erfordert. Sie nehmen einfach einen 'char *' wie immer; Sie müssen keinen neuen String-Typ verwenden. –