CString format und Unicode (std::string) Verständins
-
Warum überhaupt
std::string
in einemUNICODE
-Projekt?
Besser gleich folgendes benutzen:typedef std::basic_string<TCHAR> tstring; // or string_t
also
string
oderwstring
- je nachdem, obUNICODE
definiert ist.s.a. How do you convert CString and std::string, std::wstring to each other?
-
@Th69 sagte in CString format und Unicode (std::string) Verständins:
Warum überhaupt
std::string
in einemUNICODE
-Projekt?
Besser gleich folgendes benutzen:typedef std::basic_string<TCHAR> tstring; // or string_t
also
string
oderwstring
- je nachdem, obUNICODE
definiert ist.Ich weiß nicht. Ich würde versuchen, wo es geht die wstrings/TCHAR zu vermeiden und immer mit UTF-8 in std::string arbeiten und nur dort, wo es nötig ist, umwandeln. Dieses "je nachdem, ob UNICODE gesetzt ist", mag ich nicht. Ist aber sicher eine Philosophiefrage. Ich würde mich also nach https://utf8everywhere.org/#windows richten.
-
@Th69 sagte in CString format und Unicode (std::string) Verständins:
Warum überhaupt
std::string
in einemUNICODE
-Projekt?Vermutlich wird der wert für "field->second.name" in UTF-8 kodiert geliefert.
-
Guten morgen Leute,
Ich benutze std::string weil ich es nicht besser weißt .. sagen wir es mal so. Eigentlich bekomme ich eine char* als zeichen kette im ANSI Format von einem Gerät. Und ich habe eine MFC Project UNICODE.
Da ich keinerlei Erfahrung habe, und den c++ 11 Standard verwende wollte , habe ich immer den Wet char* => std::string => CString verwendet.. und da kam jetzt eben die UNICOD Problematik ins Spiel.)
Und wie ich sehe ist meine Wissen begrenzt diesbezüglich. Und lerne hier jetzt gerade viel dazu:)
-
Die Frage ist, ist es wirklich ANSI was vom Gerät geliefert wird?
z.b. können deutsche Umlaute oder andere Buchstaben/Zeichen im string vorkommen, welche nicht im ASCII Zeichensatz definiert sind?Wenn es wirklich ANSI ist, dann muss man wissen welche codepage genutzt wird, damit eine Konvertierung nach Unicode zu keiner Verfälschung des Textes führt.
https://en.wikipedia.org/wiki/Windows_code_page
Das MACRO CA2T wird bei der Konvertierung die Codepage nutzen, welche im System für ANSI konfiguriert wurde.
AFAIK lässt sich die verwendete Codepage auch via API call für einen Prozess ändern.
-
@firefly sagte in CString format und Unicode (std::string) Verständins:
Die Frage ist, ist es wirklich ANSI was vom Gerät geliefert wird?
z.b. können deutsche Umlaute oder andere Buchstaben/Zeichen im string vorkommen, welche nicht im ASCII Zeichensatz definiert sind?
https://www.asciitable.com/
Wenn es wirklich ANSI ist, dann muss man wissen welche codepage genutzt wird, damit eine Konvertierung nach Unicode zu keiner Verfälschung des Textes führt.
https://en.wikipedia.org/wiki/Windows_code_page
Das MACRO CA2T wird bei der Konvertierung die Codepage nutzen, welche im System für ANSI konfiguriert wurde.
AFAIK lässt sich die verwendete Codepage auch via API call für einen Prozess ändern.Hi als aus der Spec. heraus wird "ISO 8859-15" Encoding Was bedeutet das nun für mich , ist das CA2T Macro vernünftig?
-
@SoIntMan sagte in CString format und Unicode (std::string) Verständins:
ISO 8859-15
Das Makro CA2T (Was im UNICODE falle CA2W ist) hat einen zweiten Parameter mit dem man einen Identifier für die Codepage angeben kann.
CA2W ist wiederum nur ein "typedef" für CA2WEX für https://docs.microsoft.com/en-us/cpp/atl/reference/ca2wex-class?view=msvc-160
In deinem Falle wäre dass dann 28605 (iso-8859-15 ISO 8859-15 Latin 9: https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers)
-
@firefly sagte in CString format und Unicode (std::string) Verständins:
Das Makro CA2T (Was im UNICODE falle CA2W ist) hat einen zweiten Parameter mit dem man einen Identifier für die Codepage angeben kann.
CA2W ist wiederum nur ein "typedef" für CA2WEX für https://docs.microsoft.com/en-us/cpp/atl/reference/ca2wex-class?view=msvc-160
In deinem Falle wäre dass dann 28605 (iso-8859-15 ISO 8859-15 Latin 9: https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers)Optimal, danke, dann wäre das vermutlich alles gekärt;()
-
@SoIntMan Das CA2T Makro ist nur vernünftig wenn du a) mit TCHAR arbeitest und b) deine "narrow" Strings die System-Codepage verwenden. Wenn du dagegen immer mit ISO 8859-15 arbeitest, dann solltest du
MultiByteToWideChar
verwenden und dort die passende CodePage für ISO 8859-15 angeben.
-
@hustbaer sagte in CString format und Unicode (std::string) Verständins:
@SoIntMan Das CA2T Makro ist nur vernünftig wenn du a) mit TCHAR arbeitest und b) deine "narrow" Strings die System-Codepage verwenden. Wenn du dagegen immer mit ISO 8859-15 arbeitest, dann solltest du MultiByteToWideChar verwenden und dort die passende CodePage für ISO 8859-15 angeben.
sorry für die spät rückmeldung.. ok das nehm ich mir zu Herzen danke.. ich mach mich jetzt mal dran.. ich melde mich bestimmt nochmal:=)