WinAPI und UTF-8-Unterstützung
Kurze Frage bezüglich der UTF-8-Unterstützung und verschiedenen Win32-API.
In einer typischen C++ - MFC-Projekt, ist es möglich, für MessageBox (), um eine UTF-8-codierte Zeichenfolge?
Dank,
Andrew
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schnelle Antwort: Nein.
Längere Antwort: Es wird funktionieren, wenn der string enthält nur regelmäßige ANSI-Zeichen, e.g US-Englisch, da diese Zeichen, die codes sind die gleichen, die in UTF-8 und ANSI.
Wenn nicht-ANSI-Zeichen enthalten sind, oder ein zwei-byte-codierte Zeichen, die Sie brauchen, um zu transformieren, um Unicode-16 mit MultiByteToWideChar mit CP_UTF8. Ihr Programm wird auch kompiliert werden müssen mit UNICODE definiert, oder Sie können verwenden Sie die " W " - API-Aufrufe - z.B. MessageBoxW.
(Beachten Sie, dass Funktionen unter einer text-argument wie MessageBox, CreateWindow Karte, um entweder 'A' oder 'B' - Versionen, je nachdem, ob UNICODE definiert ist).
Diese kann auch von nutzen sein;
http://www.joelonsoftware.com/articles/Unicode.html
Ich den ATL/MFC-Zeichenfolge Konvertierung Makros. Zum Beispiel, wenn Sie eine ASCII-Zeichenfolge namens
myUTF8Str
mit UTF8 chars:Alternativ können Sie erstellen eine Instanz der Zeichenfolge, z.B.:
Hinweis: die
m_psz
Mitglied, das können nur-lese-Zugriff auf die raw-string-Zeiger.Kann man auch Kodieren mit
CT2A
, z.B.:Wenn Sie nicht mit TEXT-Makros, dann verwenden Sie CA2W, CW2A, etc.
NÖ, verwenden Sie MultiByteToWideChar mit
CP_UTF8
. Sehen http://www.siao2.com/2006/10/11/816996.aspx, warum Einer es nicht tun kann; W (UCS-2) ist die einzige alternative.