Unicode-RTF-text in RichEdit
Ich bin mit Mühe ein RichEdit-Steuerelement für die Anzeige von unicode-RTF-text. Meine Anwendung ist Unicode, sodass alle Zeichenfolgen sind wchar_t-strings.
Wenn ich das control als "RichEdit20A", die ich nutzen kann z.B. SetWindowText, und der text wird angezeigt, mit der richtigen Formatierung. Wenn ich das control als "RichEdit20W" dann mit SetWindowText zeigt den text wörtlich, d.h. alle RTF-code wird angezeigt. Das gleiche passiert, wenn ich die EM_SETTEXTEX parameter, der angibt codepage 1200 die MSDN sagt mir, ist verwendet, um anzuzeigen, unicode.
Ich habe versucht, mit der StreamIn-Funktion, aber dies scheint nur zu funktionieren, wenn ich den stream in ASCII-text. Wenn ich den stream in widechars dann bekomme ich auch leeren text im Steuerelement. Ich benutze die SF_RTF|SF_UNICODE Fahnen und MSDN Hinweise, dass diese Kombination nicht zulässig ist.
Also, was ist zu tun? Gibt es eine Möglichkeit zu bekommen widechars in eine RichEdit-ohne RTF-interpretation, oder muss ich es codieren? Ich habe darüber nachgedacht, versucht, UTF-8, oder vielleicht verwenden Sie die encoding-Anlagen in RTF, aber ich bin nicht sicher, was die beste Wahl ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte dies vor kurzem, und bemerkte die gleiche Art von Beobachtungen, die Sie machen.
Es scheint, dass, trotz allem, was MSDN-fast schon sagt, die "RTF" - parser arbeitet nur mit 8-bit-Kodierungen. Also, was ich am Ende dabei war, mit UTF-8, das ist ein 8-bit-Kodierung aber noch darstellen kann die gesamte Palette der Unicode-Zeichen. Erhalten Sie UTF-8 aus einem
PWSTR
über WideCharToMultiByte():Sobald man es in UTF-8 können Sie tun:
Und natürlich (habe ich aus diesem Zitat, aber während ich bin explicit...):
RTF, ASCII, jeden Charakter aus der ASCII-würde codiert werden mit escape-Sequenz.
RTF Spezifikation 1.9.1 (März 2008)
Werfen Sie einen Blick auf \uN literal in der rtf-Spezifikation, so müssen Sie konvertieren Sie Ihre wide-string-zu-string-unicode-Zeichen wie \u902?\u300?\u888?
http://www.biblioscape.com/rtf15_spec.htm#Heading9
Die zahlen in diesem Fall die Darstellung der Zeichen dezimal-code und das Fragezeichen ist das Zeichen, das ersetzen der unicode-char im Falle dass, wenn RichEdit bietet keine Unterstützung für unicode (RichEdit-v1.0).
Zum Beispiel für unicode-string, L"ZEIT" die rtf-Daten werden "\u84?\u73?\u77?\u69?"