Unicode Formatieren
-
Hallo zusammen,
ich habe ein Projekt, was mit der Eigenschaft "MultiByte Zeichensatz" erstellt wurde.
Da dort viel mit Mathematik vorkommt, möchte ich jetzt in einem String ein mathematisches Zeichen ausgeben.
Wäre dieses hier:
[url]
http://www.unicode.org/charts/PDF/U2200.pdf
[/url]Zeichen 2264hex
Hab das nun so versucht:
CString strTest = ""; strTest.Format("%X",2264);aber das macht er irgendwie nicht.
Was mach ich da denn falsch?
-
2264 ist dezimal. probier mal 0x2264.
-
hmm, nee, leider auch nicht
hab das dann mal so versucht:
strTest.Format(_T("%c"),0x2264);da malt er mir nen 'd' dahin... überlauf wahrscheinlich...
ich habe das Projekt jetzt in den Eigenschaften mal auf Unicode Zeichensatz geändert.
Da funktioniert das problemlos.
Aber nachträglich kann ich den Unicode nicht irgendwie dynamisch hinzuladen wie bsp. eine DLL oder so?
Weil sonst müsste ich jetzt jeden String entsprechend mit _T() abändern...
-
Du musst afaik das Projekt auf Unicode umschalten, damit CString Unicode-Zeichen fassen kann. Sollte dann etwa so aussehen:
CString strTest = L"7 \u2264 6";
-
CString strTest; strTest.Format(_T("%c"),0x2264);Gruß
-
ich habe das Projekt jetzt in den Eigenschaften mal auf Unicode Zeichensatz geändert.
Da funktioniert das problemlos.
Aber nachträglich kann ich den Unicode nicht irgendwie dynamisch hinzuladen wie bsp. eine DLL oder so?
Weil sonst müsste ich jetzt jeden String entsprechend mit _T() abändern...
Zuletzt bearbeitet von MSS-Software am 16:55:36 07.01.2009, insgesamt 1-mal bearbeitet
-
MSS-Software schrieb:
Aber nachträglich kann ich den Unicode nicht irgendwie dynamisch hinzuladen wie bsp. eine DLL oder so?
Nicht, dass ich wüsste. Übrigens heißt's "bsw" statt "bsp"

-
Falls Du es nur an einer Stelle brauchst, dann könntest Du auch mit einem wchar_t-Puffer und wvsprintfW arbeiten.
-
sri schrieb:
Falls Du es nur an einer Stelle brauchst, dann könntest Du auch mit einem wchar_t-Puffer und wvsprintfW arbeiten.
aha, das hört sich gut
hast vielleicht mal nen Beispiel dafür? in der MSDN hab ich dazu irgendwie nur das hier gefunden
[url]
http://msdn.microsoft.com/en-us/library/5bzxfsea.aspx
[/url]aber irgendwie muss ich da ATL für verwenden so wie ich das grad verstehe?!?
-
Ab MFC 7 (VS 2002/2003) gibt es CStringA und CStringW -- du kannst also einfach CStringW verwenden.
Mit den "nackten" Win32 Funktionen funktioniert das dann normalerweise gut, auch wenn die Fenster alle mit den "A-Versionen" der Funktionen erstellt wurden (RegisterClassA, CreateWindowA etc.). Natürlich musst du die "W-Versionen" direkt aufrufen, also TextOutW statt nur TextOut etc.Die MFC-Klassen verwenden überall TCHAR, d.h. mit denen wirst du trotzdem kein Unicode darstellen können, da TCHAR ja dann als char definiert ist.
-
CTecS schrieb:
CString strTest; strTest.Format(_T("%c"),0x2264);Gruß
Und warum incht gleich?
strTest = TCHAR(0x2264);Mach natürlich nur in einemn Unicode Projekt Sinn!
-
hustbaer schrieb:
Ab MFC 7 (VS 2002/2003) gibt es CStringA und CStringW -- du kannst also einfach CStringW verwenden.
Mit den "nackten" Win32 Funktionen funktioniert das dann normalerweise gut, auch wenn die Fenster alle mit den "A-Versionen" der Funktionen erstellt wurden (RegisterClassA, CreateWindowA etc.). Natürlich musst du die "W-Versionen" direkt aufrufen, also TextOutW statt nur TextOut etc.Die MFC-Klassen verwenden überall TCHAR, d.h. mit denen wirst du trotzdem kein Unicode darstellen können, da TCHAR ja dann als char definiert ist.
So, das hab ich jetzt soweite gemacht. Aber wenn ich mir jetzt mal das Ergebniss per MessageBox ausgeben will, kriegt er da die Typen nicht komvertiert.
CStringW Test; Test.Format(L"%c",0x2264); AfxMessageBox((LPCWSTR)Test);Hab dann noch sowas probiert
AfxMessageBox(Test); AfxMessageBox((LPCSTR)Test);Auch negativ

-
Du kannst nicht einfach Unicode und MBCS mischen.
Wenn Dein Projekt MBCS ist kannst Du nicht ohne Verlust der Darstellung von Unicode Zeichen CStringW nach CString(A) wandeln. Also auch nicht AfxMessageBox verwenden.