Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verwirrung zwischen M und C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.04.2016, 15:53 Uhr
Valyse



Hallo zusammen,

ich hoffe ich habe das hier zum einem unter der richtigen Kategorie eingestellt und es gibt hier jemanden der mir helfen kann. Suchfunktionen und Google habe ich die letzten drei Tage schon ausgiebigst genutzt aber noch nicht wirklich was gefunden.

Ich bin im Bereich C++ ein absoluter Neuling, und wurde jetzt in ein bestehendes unkommentiertes Programm geschmissen.

Meine Anforderung besteht darin das ich Daten die aus einem Global einer M Datenbank welche auf UTF-8 eingestellt ist genau so in der Oberfläche wiedergeben muss und auch den Weg zurück wieder abspeichern muss.

Ich bin soweit das ich festgestellt habe das im gesamten Quellcode keine WStrings verwendet werden (sehr altes sehr historisch gewachsenes Programm) sondern nur normal String.

Nun bekomme ich von der Datenbank aber solche Dinge zurück wyściełający, das sieht im Debuger dann so aus wyÅ›cieÅ‚ajÄ…cy do zacisków.
Ich bin nun mittlerweile auf die Libery von ICU gestoßen komme da aber auch nicht wirklich weiter.

Mein Wunsch wäre eigentlich etwas wo ich Kryptisch rein geben kann als CString und dann ein bisschen weniger Kryptisch wieder raus bekommen im gleichen Format.
Und um mein Problem komplett zu machen muss das was ich raus bekomme auch noch im UTF-8 Format an den Global zurück gegeben werden.

Was ich für die Umwandlung bisher gefunden hatte war hier aus dem Forum.


TCHAR* m = new TCHAR[strlen(szResult) + 1];
WCHAR* w = new WCHAR[strlen(szResult) + 1];
strcpy(m, szResult);
MultiByteToWideChar(CP_UTF8, 0, m, -1, w, strlen(szResult));
WideCharToMultiByte(CP_ACP, 0, w, -1, m, strlen(szResult), 0, 0);
CString AnsiText = m;
delete[] m; delete[] w;
return AnsiText;

Klappt soweit super zumindest bis zu dem Punkt wo die Polnischen Zeichen ins spiel kommen, da wird dann wieder falsch umgewandelt.

Also falls irgendwer auch nur den Hauch einer Idee hat ich bin über jede Hilfe dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2016, 17:12 Uhr
Tommix



Hallo,
CString klingt eher nach MFC bzw. ATL. Im Prinzip müßte es so oder so ähnlich gehen:

C++:
CStringW unicode = L"äöüèêé";
CStringA ansi = unicode;


Ich kann's jetzt aber leider nicht ausprobieren.
Voraussetzung ist natürlich, daß die entsprechenden Zeichen in der ANSI Codepage überhaupt vorhanden sind.

Gruß,
Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.04.2016, 16:08 Uhr
Tommix



Hallo noch mal,
es war doch nur "so ähnlich". Über den Konstruktor gehts:

C++:
CStringA ansi = "¼éèê";
CStringW unicode = CStringW(ansi);

unicode = L"êèé¼";
ansi = CStringA(unicode);



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.04.2016, 10:25 Uhr
Valyse



Hallo,

danke für deine Antwort.
Ich komm mir im Moment echt so doof vor. Mit der Umwandlung zu CStringW habe ich das Problem das er mir die Zeichen in Polnischen zum Teil zu weit Convertiert. Also zwar lesbar aber gewisse Häckchen und Kanten verschwinden ganz.

Zu dem ist jetzt noch der spannende Punkt dazu gekommen das die DB komplett auf UTF-8 umgestellt werden kann und dann auch erwartet das wirklich alles in der Codierung dort ankommt. Jetzt fliegen mir auch noch die fest Codierten Statments um die Ohren die als LPCTSTR bisher übergeben wurden. Also brauche ich, glaube ich, auch noch eine Umwandlung der Statments damit die DB das wieder lesen kann.

Und irgendwo habe ich jetzt auch noch gelesen das ich vielleicht Probleme mit meinen Textboxen im Frontend bekommen könnte das die UTF-8 gar nicht anzeigen können.
Das Programm stammt wohl so ca aus den 90er.

Ich habe es jetzt mittlerweile geschafft die Lib von ICU in eine sehr alten Version ins Programm einbinden zu können.
Aber da muss ich gestehen fehlen mir einfach die Grundlagen der Programierung mit C++ um da wirklich gescheit eine Convertierung zu schreiben.

Es soll hier nicht der Eindruck entstehen das ich zu Faul bin C++ zu lernen, mein Problem ist nur das ich hier in dieses Projekt reingeworfen wurde,weil ich ja eigentlich C# programmiert habe C++ ja auch können muss (fängt ja auch mit C an), und jetzt unter totalem Zeitdruck mal eben Schnell das Projekt UTF-8 fähig machen soll.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.04.2016, 15:01 Uhr
Tommix



Hallo,
ich fürchte viel weiter kann ich da auch nicht helfen. LPCTSTR wird je nach Projekteinstellungen zu LPCSTR oder LPCWSTR und die ganzen anderen Makros aus tchar.h ebenso. Wenn da an einzelnen Stellen etwas abweichendes gebraucht wird, wirst Du das wohl händisch machen müssen.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: